目录
Redis 管道的使用
2021年02月18日
23:26
如果出现-bash: nc: command not found 需要先按照nc
yum install -y nc
nc localhost 6379
echo -e "set k2 99 \n incr k2 \n get k2" | nc localhost 6379
一个请求/相应服务可以实现为,即使客户端没有读取到旧请求的响应,服务端依旧可以处理新请求。通过这种方式,可以完全无需等待服务端应答地发送多条指令给服务端,并最终一次性读取所有应答。管道技术最显著的优势是提高了redis服务的性能。
来自 <https://www.cnblogs.com/pxuan/p/8058299.html>
redis发布订阅技术
2021年02月18日
23:26
起两个客户端,一个用来发布,一个用来订阅
客户端1发布hello后客户端2开始订阅,则这条hello的消息客户端2是订阅不到的
在客户端2订阅后再发布hello5,则客户端可以收到了
客户端1
客户端2
redis作为缓存使用
2021年02月19日
10:27
实际应用:
假设你需要开发一个qq群,
这个qq群被常见出来,群里人互相沟通,这个时候又加入了一个新的成员,则群界面上之前沟通的消息这个新成员是看不到的,如果想看,则翻历史记录,历史记录也分为查看三天内或者更久的
redis作为数据库,缓存的区别
1.缓存数据不是很重要,不是全量数据
2.缓存应该随着访问而变化(热数据),因为内存的大小是有限的
3.再业务逻辑上,可以根据key的有效期判断,在业务运作上,随着访问变换,应该淘汰掉冷数据
设置k2数据的有效期为20s 20s后数据消失
Ttl k2 查看k2数据的当前有效期
提问:数据会随着访问时间而延长吗?不会,只和默认的有效期有关
如果数据在倒计时的过程中数据发送变换,则有效期剔除,数据永久有效,可查看下面k2的有效期时间为-1 则代表永久有效
过期判定原理
1.被动判定——当有客户端来访问这条数据时判定这条数据是否过期
2.主动判定——周期轮训判定,稍微牺牲下内存,但是保证redis的内存为王
redis事务
2021年02月19日
10:34
我们学过java的事务,事务里的多条操作,要么全部执行成功,要么一条失败,则全部回滚到之前的状态
MULTI 开启事务,exec执行事务
查看事务的命令
Watch k1 监控
WATCH 使得 EXEC 命令需要有条件地执行: 事务只能在所有被监视键都没有被修改的前提下执行, 如果这个前提不能满足的话,事务就不会被执行
先监控k1 在执行,在执行exec操作的之前,k1的值被另外的一个客户端锁修改,则事务失败,
redis的持久化对象-RDB
redis是单进程单线程的,如何让redis变成非阻塞,redis继续对外提供服务的同事,将数据落地
Fork cow
redis调用fork,启动一个子进程
RDB:时点性,save ,bysave——》fork ,配置文件中编写bgsave这个表示