search

Home  >  Q&A  >  body text

php - Redis 键值设计问题?

作为一个小白,最近学习 Redis 缓存,心中有一个疑问:
假如在 mysql 中有一张 user 表用于保存用户的相关信息,表的主要字段有:id,username,password,email,nick,born,sex,status等等,现在想将 user 数据表中的所有数据全部缓存到 redis 数据库服务器中,请问 redis 的键值应该怎么设置呢?
是设为类似于:

user:[id]:username username_value
user:[id]:password password_value
user:[id]:email email_value
user:[id]:nick nick_value
...

还是设置为这样的形式呢:

user:[id] json_string
// json_string 是将一条用户信息的二维数组转换成json字符串

请问这两种形式哪种更好一些?哪种更节约内存一些?
希望各位大婶能解答一下我的疑问,对此表示万分感谢 =.=

PHP中文网PHP中文网2778 days ago916

reply all(11)I'll reply

  • PHP中文网

    PHP中文网2017-04-11 09:05:30

    一般业内的做法就是
    值存储成二进制的形式,而不是字符串,这样是省内存的,效率也高,缺点就是通过redis-cli没法看明文,因为已经是二进制形式了
    比如你这个
    key=user:[id]
    value=这个user对象转成的二进制形式

    那么下次你用java读这个value后, 会自动转为你那个对象, 多简单, 不用一个一个属性set了

    不过你要注意一旦涉及成这样,就无法通过user的其他属性进行搜索了,前提是你要了解你的业务, 如果有其他字段的搜索你要加一组其他的key value, 在nosql中数据冗余很常见

    nosql都是这样, 写程序的一定要了解业务, 否则数据结构设计的会不好, 虽然nosql的使用门槛很低,但是设计门槛还是有的

    reply
    0
  • Cancelreply