Redis存储用户中心会话数据的问题

牟凌涛 发布于 2013/05/21 09:53
阅读 2K+
收藏 0

设计一个用户中心系统,考虑到会话票据经常读取,想用Redis来存储,目前有两种想法:

Jedis jedis = new Jedis("localhost");

//方案一
HashMap<String,String> userInfo = new HashMap<String,String>();
userInfo.put("uid", "123456");
userInfo.put("user", "MyUserName");
userInfo.put("nick", "MyNickName");
jedis.hmset("TICKET-ABCDEFG", userInfo);

//方案二
jedis.set("TICKET-ABCDEFG:uid", "123456");
jedis.set("TICKET-ABCDEFG:user", "MyUserName");
jedis.set("TICKET-ABCDEFG:nick", "MyNickName");
请各位大大拍砖指点。想找一个效率高点的优秀点的方法。。谢谢啦。。

加载中
0
猫哥-u
猫哥-u

各有优缺点,方案二可以只按get("TICKET-ABCDEFG:xxx") 读取一条,如果只需要修改其中的一条属性也可以set("TICKET-ABCDEFG:xxx") 操作简单,读取数据量小,但是要TICKET-ABCDEFG下的所有属性值,就需要操作多次,如果属性比较多的时候,操作的次数相应增加,并发性能对应下降,这就是这种方式的缺点; 方案一hmget("TICKET-ABCDEFG")就可以把TICKET-ABCDEFG的所有属性取到一个HashMap中,读取整个属性信息相对方案二较快,但是如修改其中一个值,从新hmset回去的时候要把整个HashMap重新set回去,这就是第一种方式的缺点;

综合考虑,做测试找出最优方案

0
酒逍遥
酒逍遥
为什么要叫  Jedis 
酒逍遥
酒逍遥
回复 @牟凌涛 : 明白了..谢谢.个人觉得方案一更好点
牟凌涛
牟凌涛
http://www.oschina.net/p/jedis
0
IUnKnown
IUnKnown

Redis的键控件就是一个字典(dict),其实现就是哈希表,在字典中添加、查找一个给定元素,时间复杂度均为O(1)。hmset是操作redis中哈希表(这里叫map吧,以便区别上面的哈希表)的命令,redis中的map采用压缩列表(ziplist)和dict两种编码方式存储(默认是ziplist)。ziplist上的操作理论上比dict时间复杂度要高,但是其节约内存空间。方案二的数据库键空间比方案一大若干倍,更容易引起rehash。方案二在数据量较小的时候理论上执行效率更高。方案一在数据量较大时更节省内存空间,若数据量很大,需要用分布式缓存时,方案一更有优势。

0
梦回西洲
梦回西洲
方案一最好,方案一也是可以读取指定属性,更新制定属性和删除指定属性的。
返回顶部
顶部