我现在有一张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
但是上面的那种 恭喜你中大奖不知道怎么存储了 ???
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
然后用户可以进行订阅这几个频道