从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를 사용하기 위해서입니다.
redis를 사용하면 캐싱이 가능하므로 기본 키만 키로 사용하면 되며, 인덱스 기능을 사용하여 목록을 만들 수도 있습니다.
hash
여러 필드에 개체 저장소
기본 키를 SET
또는 SORTED SET
특정 항목 내에서 SORT
로 정렬하고 SQL
를 나열하려는 경우 redis의 timestamp
명령이 위의 해시 저장 방법과 같은 user
대신 많은 쿼리를 해결할 수 있다는 점에 주목할 가치가 있습니다. 범위 오세요
SQL문과 동일합니다
으아악怪我咯2017-04-21 10:59:54
첫 번째 질문은 해시 구조를 이해하기 위해 Redis를 Memcache로 사용하고 있다는 것입니다. 사용자 정보는 user:1->{username:sss,age:12}와 같은 해시 구조를 사용해야 합니다.
迷茫2017-04-21 10:59:54
Redis에 데이터를 저장하려면 더 많은 해시 방법을 사용하세요. 이러한 방식으로 사용해야 하는 일부 연관을 해시에 키 값으로 저장할 수 있습니다. 둘째, 원래 관계형 데이터베이스에서 설계된 일부 관계 및 쿼리 방법 습관은 Redis를 사용할 때 조정되어야 합니다. 이전 아이디어를 완전히 복사할 수는 없습니다.