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

发布于 2021-11-15 17:10:37 字数 580 浏览 789 评论 5

设计一个用户中心系统,考虑到会话票据经常读取,想用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");
请各位大大拍砖指点。想找一个效率高点的优秀点的方法。。谢谢啦。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

归属感 2021-11-20 20:58:40

方案一最好,方案一也是可以读取指定属性,更新制定属性和删除指定属性的。

飘然心甜 2021-11-20 20:36:02

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

你曾走过我的故事 2021-11-20 02:11:12

http://www.oschina.net/p/jedis

倚栏听风 2021-11-19 18:53:54

回复
明白了..谢谢.个人觉得方案一更好点

归属感 2021-11-17 08:25:36

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文