redis 存储mysql多行记录

我现在有一张mysql 表 message 叫消息记录表
表字段如下:

编号      Userid      Message       Publish_time        Type
1         2          注册成功        2015-10-20            1
2         3          注册成功        2015-10-12             1
3         3          恭喜你中大奖    2015-09-09            2

现在打算用redis来存储, 那么如何选用redis的哪种数据类型?
好像没找到合适的数据类型。。。。
如果采用hash类型 比如
hset message:2 userid 2 message 注册成功 publish_time 2015-10-20 Type 1
hset message:3 userid 3 message 注册成功 publish_time 2015-10-12 Type 1
但是上面的那种 恭喜你中大奖不知道怎么存储了 ???

阅读 7.3k
2 个回答

redis是以键值对存储的,这不太好存储吧。可以考虑将mysql记录转为json格式存储到redis。
用经常用来查询的字段作为键,记录的json格式作为值存储。
比如用UserId作为键,则第一条记录为:
key:1
value:{“id”:1, "UserId":2, "Message":"注册成功", "Publish_time":"2015-10-20", "Type":1}

我在其他地方看到这种看看合适不,主要是采用了 redis的集合 + string 数据格式:
redis消息存储,选择合适的类型进行存储

用户定义的消息类型:

可以把这几个消息定义为频道 , 然后用户进行定义此频道利用此频道进行订阅消息
假设某个用户的uid 是 1
假设消息类型有
1:注册新用户 (channel_register)
2:用户抽奖中奖了(channel_lottery)
3:用户申请体现了(channel_deposit)
4:一个公共的消息所有用户都可以看的到(channel_common)
第一步:
我用集合存储所有的频道消息
127.0.0.1:6379> SADD member_channel channel_register channel_lottery channel_deposit channel_common
(integer) 4
127.0.0.1:6379> SMEMBERS member_channel
1) "channel_register"
2) "channel_common"
3) "channel_deposit"
4) "channel_lottery"
如何获取用户定义的消息呢?
我先设置一个用户定义的消息:

127.0.0.1:6379> set channel_register_1 "you register"
OK
127.0.0.1:6379> set channel_lottery_1 "lottery user_id is 1 "
OK
127.0.0.1:6379> set channel_deposit_1 "deposit user_id is 1"
OK
那么在获取用户定义的频道根据uid进行组合,然后使用
127.0.0.1:6379> get channel_register_1
"you register"

另外还有一种情况是:
我可能批量给用户发送消息 ,所以要把用户设置到一个频道里面 ,那么在新建一个集合,在和上面的集合 member_channel
取并集
//先定几个私有的频道
127.0.0.1:6379> SADD member_private_channel publish_money publish_score
(integer) 2
然后用户可以进行订阅这几个频道

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题