一、yum安装
[root@db01 tmp]# cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) [root@db01 tmp]# yum install redis -y [root@db01 tmp]# redis-server --version Redis server v=6.2.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=ec192bdd77ecd321 [root@db01 tmp]# systemctl start redis [root@db01 tmp]# [root@db01 tmp]# redis-cli 127.0.0.1:6379> keys * (empty array)
二、源码安装最新
1、下载
wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar -xf redis-7.2.4.tar.gz
2、编译安装
# 1、说明:不需要执行./configure 在安装某些软件时,需要先执行./configure脚本来检查系统环境是否满足软件编译和运行的条件、定制好一些参数 然后生成对应的Makefile文件 但是,在安装Redis时,并没有这个步骤,原因在于Redis的源代码分发包中已经预编译了Makefile, 所以我们可以直接处理编译(make)和安装(make install)的步骤。 # 2、多核编译 # make -j4 # 并发4个工作,一般是内核数的两倍 make -j #-j 尽可能多的并发 # 3、编译安装 make PREFIX=/usr/local/redis install
make -j情况下机器的负载陡增
3、添加环境变量
[root@egon /]# vim /etc/profile.d/redis.sh export PATH=/usr/local/redis/bin:$PATH
4、修改配置文件
# 1、拷贝模版配置 mkdir /usr/local/redis/conf/ cp /root/redis-7.2.4/redis.conf /usr/local/redis/conf/ # 2、修改配置文件 [root@db01 conf]# redis.conf ... # 1、修改:以守护进程的方式运行 daemonize yes # 2、修改:0.0.0.0意味着接受任意IP的连接请求。 bind 0.0.0.0 # 3、增加:设置redis的登录密码 requirepass 123 ...
5、加入systemd管理
[root@egon /usr/local/redis/conf]# vim /usr/lib/systemd/system/redis.service [Unit] Description=Redis After=network.target [Service] Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target # 重载 [root@egon /usr/local/redis/conf]# systemctl daemon-reload
6、启动并加入开启自启
systemctl start redis.service systemctl enable redis.service
7、客户端登录
redis-cli -h 192.168.71.16 -p 6379 -a '123' 或者登录后再用AUTH认证 [root@db01 tmp]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 127.0.0.1:6379> AUTH 123 OK
三、设置密码
# 1、在配置文件中增加配置项进行永久设置 requirepass 123 # 2、或者进入后设置(重启redis后失效) [root@db01 tmp]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "" 127.0.0.1:6379> config set requirepass 123 OK
四、基本操作与数据类型了解
基本操作
# 1、查看 keys * # 查看所有,⽣产中禁⽤[可能键值对很多, redis会崩溃, 耗费资源, ⽽且获 取不到信息] # 2、设置过期时间(通用) expire 键名 3 # 3、字符也可以这么设置过期时间 set name "egon" ex 5 # 5s后自动删除 # 4、查看过期时间 ttl name # -1永不过期,-2已经过期,5代表剩余5秒过期 # 3、设置过期时间
1、字符串类型
# 1、增 set name "egon" # 2、查询 get name
2、hash类型,类似python中的字典
# 1、增 hset info name "egon" age 18 gender "male" # 增 # 2、查询 hget info name # 查 hget info age hget info gender
3、列表数据类型
# 1、增 lpush namelist "egon" "tom" "jack" lpush namelist "lili" # 2、查 lrange namelist 0 0 # start为0,stop也为0,代表取0号索引的元素 lrange namelist 0 -1 # 取出所有
4、无序集合set(元素不允许重复,无序)
# 1、增 SADD num 1 SADD num 12 123 1234 12345 123456 1234567 # 2、查询 SMEMBERS num
5、有序集合sortset(元素不允许重复,有序)
# 1、增,语法:ZADD key score1 member1 [score2 member2] 会按照分数排序,分数大的往后排 ZADD names 1 "egon" ZADD names 2 "tom" ZADD names 20 "lili" ZADD names 2 "jack" ZADD names 3 "lucy" # 2、查看指定分数区间的元素 127.0.0.1:6379> ZRANGE names 0 -1 # 从0号索引到最后,即查看所有,会发现就是按照分数排序的 1) "egon" 2) "jack" 3) "tom" 4) "lucy" 5) "lili" 127.0.0.1:6379>
6、redis默认16个库0-15, 当前库就是0号, select 0进⼊0号, 每⼀个库都是单独隔离空间
127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> SELECT 1
更多其他操作想了解的话见:https://egonlin.com/?p=9934
五、发布订阅
1、发布订阅是什么?
发布订阅是一种功能/机制,它可以让客户端订阅特定的频道,当有消息发布到这个频道时,订阅了这个频道的客户端都会收到这个消息
2、redis 对比 kafka
redis是一个内存键值数据库,但是它很强大、还支持发布订阅功能(可以当成一个“队列”去用)
而kafka是流处理引擎/消息队列
但是,二者的可比性在于两者都可用于创建发布-订阅(pub/sub)消息传递系统
在现代云架构中,应用程序被分解为多个规模较小且独立的构建块,称为服务。
Pub/sub 消息收发可以为这些分布式系统提供即时事件通知。
redis与kafka详细对比见:https://aws.amazon.com/cn/compare/the-difference-between-kafka-and-redis/
3、发布订阅机制的具体应用场景举例:
1、实时消息推送:Redis的发布订阅功能可以用于构建实时消息系统,将消息发布到指定的频道,订阅者可以实时接收到消息并进行相应的处理。
2、即时聊天系统:通过Redis的发布订阅功能可以构建即时聊天系统,用户可以订阅自己感兴趣的聊天频道,实时接收到其他用户发送的消息。
3、实时数据更新通知:除了库存更新通知,Redis的发布订阅功能还可以用于其他实时数据的更新通知,比如订单状态更新、用户操作日志等,通过发布订阅可以及时通知相关的业务逻辑进行处理。
4、分布式系统通信:在分布式系统中,不同的服务之间需要进行通信和协调,可以使用Redis的发布订阅功能来实现简单的消息传递和事件触发。
5、日志处理:通过将日志信息发布到Redis的频道中,可以实时将日志信息发送给订阅者,便于日志处理和监控。
6、实时统计和监控:可以使用Redis的发布订阅功能来实时收集和处理系统的统计数据,并使用订阅者进行监控和报警。
1、订阅:消费者
2、发布:生产者
3、频道:频道最主要的功能是存储发布者发布的信息,然后分别发给每一个消费者。
打开三个窗口,一个窗口为发布者,两个窗口为订阅者。
两个订阅制执行:SUBSCRIBE test,订阅名为test的频道
一个发布者执行:PUBLISH test xxxxxxxxx
PUBLISH test "abc" PUBLISH test "123"