作者:admin发布时间:2021-10-07分类:传奇私服浏览:232评论:1
1.1k
✓已被采纳
理论上是可以的,但是极其不推荐!!!
假设和发送了2条消息,那么可以储存为:
=(host='',port=6379)#按照+时间戳来设置key,为聊天记录内容conn.set('User_a:User_b:****50809001','msg1')#设置过期时间为3secondconn.set('User_a:User_b:****50809002','msg2',ex=3)#通过Redis.keys来获取所有`User_a`发送给`User_b`的信息的key传奇私服聊天记录不会储存smsg_keys=conn.keys('User_a:User_b:*')#通过获得的keys来获取所有信息内容msgs=conn.mget(msg_keys)ifmsg_keyselse[]
但是我们看到由于redis是按照键值对来存储数据的,它查询数据不是很方便,也不支持一些比较复杂的条件查询,甚至对于上面这个解决方案,还可能存在性能问题,参考:redis生产环境中慎用keys模糊匹配方法.keys方法可以换成scan_iter方法.
综上,用redis来存储聊天记录不是一个很明智的选择.redis不是天生用来做这个事情的.
我推荐使用mongodb来实现,参考:ExpireDatafromCollectionsbySettingTTL.当然关系数据库也可以实现这个业务需求,需要加一个create_time字段,然后每次查询的时候只查出没过期的聊天记录,即是满足create_time+expiresdatetime.now()的聊天记录.
已有1位网友发表了看法: