recherche

Maison  >  Questions et réponses  >  le corps du texte

关于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

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

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

伊谢尔伦伊谢尔伦2799 Il y a quelques jours594

répondre à tous(4)je répondrai

  • ringa_lee

    ringa_lee2017-04-21 10:59:54

    Tout d'abord, si vous souhaitez utiliser plusieurs champs, ne stockez pas les champs individuellement, ni ne sérialisez un objet puis ne le stockez pas. Ce n'est pas différent de Memcache.

    Deuxièmement, vous devez comprendre le fait que nous n'utilisons pas Redis pour remplacer complètement la base de données relationnelle. Comme vous l'avez dit, la recherche d'utilisateurs par nom d'utilisateur n'a pas du tout besoin d'être mise dans Redis. juste pour utiliser Redis.

    Avec Redis, vous pouvez effectuer une mise en cache, vous n'avez donc besoin que d'utiliser la clé primaire comme clé, et vous pouvez également utiliser sa fonction d'index pour créer des listes

    Vous pouvez utiliser hashle stockage d'objets pour plusieurs champs

    HMSET user:1234 name "hello" password "123456" timestamp "12321321"
    

    Enregistrez la clé primaire dans un SET ou SORTED SET

    SADD user_list 1234
    

    Il convient de noter que la commande SORT de redis peut résoudre de nombreuses requêtes au lieu de SQL, comme la méthode de stockage de hachage ci-dessus, si nous voulons trier par timestamp et lister user dans un certain gamme Viens

    SORT user_list BY user:*->timestamp GET # LIMIT 0 10 DESC
    

    C'est équivalent à une instruction SQL

    SELECT * FROM user ORDER BY timestamp DESC LIMIT 0 10
    

    répondre
    0
  • 怪我咯

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

    La première question peut uniquement être que vous utilisez Redis comme memcache, pour comprendre la structure de hachage. Les informations utilisateur doivent utiliser une structure de hachage, telle que user:1->{username:sss,age:12}

    .

    répondre
    0
  • PHPz

    PHPz2017-04-21 10:59:54

    redis prend en charge le multi

    répondre
    0
  • 迷茫

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

    Utilisez davantage de méthodes de hachage pour stocker les données dans Redis. De cette façon, certaines associations qui doivent être utilisées peuvent être enregistrées en utilisant les valeurs clés du hachage. Deuxièmement, certaines relations et habitudes de méthodes de requête conçues à l'origine dans les bases de données relationnelles doivent être ajustées lors de l'utilisation de Redis. Nous ne pouvons pas copier complètement les idées précédentes.

    répondre
    0
  • Annulerrépondre