从RDBMS彻底的过渡到NoSQL,关键的是不是NoSQL中的Key设计咧? 比如原先的登录注册,RDBMS中可能是
user_id, username, password
1 , user , xxxxxxxx
2 , user2 , xxxxxxxx
过渡到Redis,可以这样
users:user password
users:user2 password
检测用户是否已经注册
RDBMS:
select count(*) from table where username = 'user2'
Redis:
Get users:user2
但是抛弃“关系”又怎么实现“关系”呢? 比如用户还有profile。 redis可以以users:username为key。然后存个对象进去。 但是怎么进行搜索呢?比如,我要获取所有注册时间在指定时间的一批用户。当然,可以按照users:username:profile_name挨个存,比如:
users:user2:profile_photo /path/hash.jpg
users:user2:profile_regdate timestamp
users:user3:profile_regdate timestamp
但是,会不会出现,删除某用户的时候,由于特殊原因导致删不干净的问题……比如user3的所有数据正在删除,然后异常了,导致profile_regdate没有删除。而且以后也检测不到了。
再者,好友关系。redis可以这么存:
relation:uid:fuid timestamp
relation:fuid:uid timestamp
假设需求:获取我的好友的所有除我以外的所有好友。
暂时就这么多……不知道表述是否清楚了。
ringa_lee2017-04-21 10:59:54
まず第一に、複数のフィールドを使用する場合は、フィールドを個別に保存したり、オブジェクトをシリアル化してから保存したりしないでください。これは memcache と変わりません。
次に、リレーショナル データベースを完全に置き換えるために redis を使用しているわけではないという事実を理解する必要があります。あなたが言ったように、ユーザー名によるユーザーの検索を redis に入れる必要はまったくありません。レディスを使用します。
Redis を使用するとキャッシュができるので、キーとして主キーを使用するだけでよく、そのインデックス機能を使用してリストを作成することもできます
hash
オブジェクトを使用して複数のフィールドを保存できますhash
对象存储
HMSET user:1234 name "hello" password "123456" timestamp "12321321"
把主键存到一个SET
或者SORTED SET
里
SADD user_list 1234
值得注意的是redis的SORT
命令可以代替SQL
解决很多查询,比如像上面这种哈希存储方式,如果我们要按timestamp
排序并在一定范围内列出user
リーリー
SET
または SORTED SET
に保存しますリーリー
timestamp を押したい場合、Redis の SORT
コマンドは、SQL
の代わりに、上記のハッシュ ストレージ メソッドなどの多くのクエリを解決できることは注目に値します。
code>特定の範囲内の user
を並べ替えてリストします🎜
リーリー
🎜SQL文に相当します🎜
リーリー怪我咯2017-04-21 10:59:54
最初の質問は、ハッシュ構造を理解するために redis を memcache として使用しているということだけです。ユーザー情報には user:1->{username:sss,age:12} などのハッシュ構造を使用する必要があります。
迷茫2017-04-21 10:59:54
より多くのハッシュメソッドを使用してデータを Redis に保存します。このようにして、使用する必要があるいくつかの関連付けをキー値としてハッシュに保存できます。次に、リレーショナル データベースで元々設計されていた一部のリレーションシップとクエリ メソッドの習慣は、redis を使用するときに調整する必要があります。以前のアイデアを完全にコピーすることはできません。