redis 存储mysql多行记录
阿神
阿神 2017-04-17 13:33:34
[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
但是上面的那种 恭喜你中大奖不知道怎么存储了 ???

阿神
阿神

闭关修行中......

全部回复(2)
PHPz

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
然后用户可以进行订阅这几个频道

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号