1. 管道
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
# 在使用管道的时候需要安装nc包
[root@base ~] yum -y install nc
# 测试reids是否存活, 其中 '-e'代表转义'\n'换行符, localhost为redis的ip.6379为redis的端口号
[root@base ~] echo -e "ping\n" | nc localhost 6379
+PONG
# 创建一个测试数据,通过计算,打印结果
[root@base ~] echo -e 'set price 80\n incr price\n decrby price 10\n get price' | nc localhost 6379
+OK
:81
:71
$2
71
[root@base ~] redis-cli
127.0.0.1:6379> get price #发现与打印结果一致
"71"
节约成本,减少IO次数
2.事务
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
# 查看帮助
127.0.0.1:6379> help @transactions
# 事务的使用, 一般为三个阶段: 开启事务,命令入队,执行事务. 事务开启期间会有标识 'TX'
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 xiaoming
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
假设同时开启事务1,2 , 但是在事务1优先执行
假设同时开启事务1,2 , 但是在事务2优先执行
结论: 命令的执行顺序,只和exec的执行顺序有关系
WATCH: redis事务的watch命令,类似乐观锁的作用.当监控对象改变,则停止事务.
样例: 我们对一个已存在的k1进行监控. 当在执行事务完毕之前,对k1进行更改. 查看执行的结果.
3.布隆过滤器安装
推荐2.2.*版本的. 2.4.x以上版本好像编译会报错如下
# 下载,下载不了的直接使用顶部的资源
wget https://github.com/RedisBloom/RedisBloom/archive/refs/tags/v2.2.18.zip
# 解压
yum -y install unzip
unzip v2.2.18.zip
# 到解压的目录进行编译
cd RedisBloom-2.2.18/ && make
redisbloom.so就是我们需要的模块
3.1.启动方式一
启动之前需要将之前的服务停止
# 停止服务并验证
[root@base ~]# systemctl stop redis_6379.service
[root@base ~]# systemctl status redis_6379.service
# 运行
[root@base RedisBloom-2.2.18]# nohup redis-server --loadmodule /opt/software/bf/RedisBloom-2.2.18/redisbloom.so &
[1] 27736
[root@base RedisBloom-2.2.18]# nohup: 忽略输入并把输出追加到"nohup.out"
[root@base RedisBloom-2.2.18]# jobs
[1]+ 运行中 nohup redis-server --loadmodule /opt/software/bf/RedisBloom-2.2.18/redisbloom.so &
[root@base RedisBloom-2.2.18]# ps -ef | grep -v grep | grep redis
root 27736 60703 0 18:46 pts/2 00:00:00 redis-server *:6379
root 101774 101498 0 18:16 pts/0 00:00:00 redis-cli
# 测试
127.0.0.1:6379> BF.EXISTS # 进入redis客户端,BF.可以tab补全,说明已经添加上该模块
注意事项: 使用命令的时候, 路径必须是绝对路径,不然会报错
3.2.启动方式二
vi /etc/init.d/redis_6379
vi /etc/redis/6379.conf
根据样例,我们将需要的模块进行添加
# 重启服务并验证
[root@base init.d]# systemctl restart redis_6379.service
[root@base init.d]# redis-cli
127.0.0.1:6379> BF.ADD
此时模块已经安装成功