作为一个小白,最近学习 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中文网2017-04-11 09:05:30
一般业内的做法就是
值存储成二进制的形式,而不是字符串,这样是省内存的,效率也高,缺点就是通过redis-cli没法看明文,因为已经是二进制形式了
比如你这个
key=user:[id]
value=这个user对象转成的二进制形式
那么下次你用java读这个value后, 会自动转为你那个对象, 多简单, 不用一个一个属性set了
不过你要注意一旦涉及成这样,就无法通过user的其他属性进行搜索了,前提是你要了解你的业务, 如果有其他字段的搜索你要加一组其他的key value, 在nosql中数据冗余很常见
nosql都是这样, 写程序的一定要了解业务, 否则数据结构设计的会不好, 虽然nosql的使用门槛很低,但是设计门槛还是有的