찾다

 >  Q&A  >  본문

关于redis的问题,我的理解正确否?

从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

假设需求:获取我的好友的所有除我以外的所有好友。

暂时就这么多……不知道表述是否清楚了。

伊谢尔伦伊谢尔伦2800일 전606

모든 응답(4)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-21 10:59:54

    우선 여러 필드를 사용하려면 필드를 개별적으로 저장하거나 객체를 직렬화한 후 저장하는 것이 Memcache와 다르지 않습니다.

    두 번째로, 관계형 데이터베이스를 완전히 대체하기 위해 Redis를 사용하지 않는다는 사실을 이해해야 합니다. 말씀하신 것처럼 사용자 이름으로 사용자를 검색하는 것은 Redis에 전혀 입력할 필요가 없습니다. 단지 redis를 사용하기 위해서입니다.

    redis를 사용하면 캐싱이 가능하므로 기본 키만 키로 사용하면 되며, 인덱스 기능을 사용하여 목록을 만들 수도 있습니다.

    hash여러 필드에 개체 저장소

    를 사용할 수 있습니다. 으아악

    기본 키를 SET 또는 SORTED SET

    에 저장하세요. 으아악

    특정 항목 내에서 SORT로 정렬하고 SQL를 나열하려는 경우 redis의 timestamp 명령이 위의 해시 저장 방법과 같은 user 대신 많은 쿼리를 해결할 수 있다는 점에 주목할 가치가 있습니다. 범위 오세요

    으아악

    SQL문과 동일합니다

    으아악

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-21 10:59:54

    첫 번째 질문은 해시 구조를 이해하기 위해 Redis를 Memcache로 사용하고 있다는 것입니다. 사용자 정보는 user:1->{username:sss,age:12}와 같은 해시 구조를 사용해야 합니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-21 10:59:54

    redis는 멀티를 지원합니다

    회신하다
    0
  • 迷茫

    迷茫2017-04-21 10:59:54

    Redis에 데이터를 저장하려면 더 많은 해시 방법을 사용하세요. 이러한 방식으로 사용해야 하는 일부 연관을 해시에 키 값으로 저장할 수 있습니다. 둘째, 원래 관계형 데이터베이스에서 설계된 일부 관계 및 쿼리 방법 습관은 Redis를 사용할 때 조정되어야 합니다. 이전 아이디어를 완전히 복사할 수는 없습니다.

    회신하다
    0
  • 취소회신하다