redis学习笔记(七)管道、事务、发布订阅

一、管道

1.管道的意义?

啤酒瓶理论:
怎么喝啤酒最舒服?
是去超市买一瓶,喝一瓶,再去超市买一瓶。还是去超市买一箱回来慢慢喝?
答案一般是后者,这就是管道的意义:减少通信成本,只需要TCP握手一次,就能执行多条命令。

2.实际命令

(yum install nc) nc localhost 6379 //连接redis,建立socket连接 echo -e “set
k2 99\nincre k2\n get k2” | nc localhost 6379 // 连接6379,并发送3条命令,分别是
set k2 99
incre k2
get k2

3.管道的应用

可以对redis做冷启动,利用管道读取文件做初始数据

二、事务

redis的事务并不完整,没有回滚功能,原因是回滚会损耗redis性能,作者决定不做回滚。不需要回滚,那么redis内部可以保持简单且快速

基本命令:

help @transactions // 查看事务相关命令
mutli // 开启事务
exec // 关闭事务
discard // 取消事务
watch {keys }// 监视一个/多个key,如果事务执行前key被改动,则打断事务

注:redis事务只会因为语法而失败

三、发布订阅

基本命令:

help @pubsub // 查看发布订阅命令
publish ooxx hello // 向管道ooxx推送一个hello
subscribe ooxx // 订阅ooxx

面试题:
微信,qq等,历史性数据是存在redis里还是关系型数据库里?设计一个解决方案。
思考:
微信如果半年不上线,上线后一样可以收到这半年以来的所有消息,所以大概率是持久化进数据库里的。但数据库不可能接收微信这样的高并发场景,因此可能会用到redis的缓存机制(最近几天)和实时机制(发布订阅)
所以设计方案如下:
在这里插入图片描述
如图所示,实时性的数据利用redis发布订阅实现(微信在线的情况)。最近3天的数据使用sortSet实现(score为时间戳),更久远的数据用kafka持久到数据库里。
上图实现有一个问题,就是读写都在同一个redis中。如果能实现读写分离就更好了,因此写有优化方案,如下:
在这里插入图片描述
用另一个redis订阅写的redis,那就从业务角度实现了读写分离

如果有写错的地方,欢迎大家指正,感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值