cari

Rumah  >  Soal Jawab  >  teks badan

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

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

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

伊谢尔伦伊谢尔伦2882 hari yang lalu628

membalas semua(4)saya akan balas

  • ringa_lee

    ringa_lee2017-04-21 10:59:54

    Pertama sekali, jika anda ingin menggunakan berbilang medan, jangan simpan medan secara berasingan atau sirikan objek dan kemudian simpannya. Ini tidak berbeza dengan memcache.

    Kedua, anda perlu memahami hakikat bahawa kami tidak menggunakan redis untuk menggantikan sepenuhnya pangkalan data hubungan Seperti yang anda katakan, mencari pengguna dengan nama pengguna tidak perlu dimasukkan ke dalam redis sama sekali hanya untuk menggunakan redis.

    Dengan redis anda boleh melakukan caching, jadi anda hanya perlu menggunakan kunci utama sebagai kunci, dan anda juga boleh menggunakan ciri indeksnya untuk membuat senarai

    Anda boleh menggunakan hashstoran objek untuk berbilang medan

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

    Simpan kunci utama dalam SET atau SORTED SET

    SADD user_list 1234
    

    Perlu diambil perhatian bahawa perintah SORT redis boleh menyelesaikan banyak pertanyaan dan bukannya SQL, seperti kaedah storan cincang di atas, jika kita ingin mengisih mengikut timestamp dan menyenaraikan user dalam tempoh tertentu julat Datang

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

    Ia bersamaan dengan pernyataan SQL

    SELECT * FROM user ORDER BY timestamp DESC LIMIT 0 10
    

    balas
    0
  • 怪我咯

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

    Soalan pertama hanyalah bahawa anda menggunakan redis sebagai memcache, untuk memahami struktur cincangan Maklumat pengguna harus menggunakan struktur cincang, seperti pengguna:1->{username:sss,umur:12}

    .

    balas
    0
  • PHPz

    PHPz2017-04-21 10:59:54

    redis menyokong berbilang

    balas
    0
  • 迷茫

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

    Gunakan lebih banyak kaedah cincang untuk menyimpan data dalam redis. Dengan cara ini, beberapa persatuan yang perlu digunakan boleh disimpan menggunakan nilai utama dalam cincang. Kedua, beberapa perhubungan dan tabiat kaedah pertanyaan yang asalnya direka dalam pangkalan data hubungan perlu diselaraskan apabila menggunakan redis. Kita tidak boleh meniru sepenuhnya idea-idea sebelumnya.

    balas
    0
  • Batalbalas