文章简介
redis作为一个基于内存的数据结构存储系统,由于它的灵活性和可拓展性强,在我们日常开发中经常被用作数据库、缓存或者消息代理。本文就从Redis的基本部署使用说到Redis的集群、锁和消息对列
Redis基本使用
一、安装
下载地址:https://github.com/tporadowski/redis/releases
选择下载安装包或者安装程序
在安装目录下找到redis-server.exe运行即可启动Redis服务
二、Redis键命令
Redis键命令就是对已存储的键值对进行增删改查的命令
1、查询键
EXISTS key //判断键是否存在
-
key存在,则返回1
-
key不存在,则返回0
KEYS pattern //查找键
- 用于按照指定的模式pattern 查找所有的key
- KEYS * :表示匹配查找数据库中的所有key
- kEYS r?dis :表示匹配 ?位置,任何一个字母,?仅代表任意一个字母,如:redis
- kEYS r*dis:表示匹配 位置,任何零个、一个或多个字母、 代表零个或多个,如:rdis、redis、reedis
- KEYS r[ae]dis :表示匹配radis 和 redis ,不会匹配别的,只会匹配这两种
2、修改键
RENAME key 新的键名 //修改键的名称
- 将key 的名称修改成新的键名
- 若key不存在,返回error
- 若新键名存在,则覆盖
3、删除键
DEL [key...] //删除一个或多个键
- key若不存在,则忽略
三、Redis客户端
常用的Redis客户端有redis desktop manager、Another Redis Desktop Manager、RedisInsight,其中后面两个比较推荐,RedisInsight界面比较美观,但是美中不足的是没法模糊搜索。
四、SpringBoot整合Redis
依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
application.yml配置
spring:
redis:
database: 0 # Redis数据库索引(默认为0)
host: localhost # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
lettuce:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-idle: 8 # 连接池中的最大空闲连接 默认 8
min-idle: 0 # 连接池中的最小空闲连接 默认 0
Redis模式
Redis有单机模式、主从模式、哨兵模式和集群模式
- 单机模式:优点:操作简单、成本低、不需要同步数据;缺点:可靠性低,服务掉线没法及时补救。
- 主从模式:优点:
1、Redis主从模式
在生产环境中,如果只使用一个Redis服务,在出现服务出现问题掉线时,等到问题修复重启,时间就拖得太长了。这时候如果是使用的主从模式,在主库挂掉后,直接让相同配置的从库接管,系统又能正常运行了。Redis主从模式配置如下:
- 在同一个Redis程序下建两份一样的配置文件,命名为master.conf和slave.conf
- 其中master.conf中port为
6379
,则slave.conf中的port设置为6380 slaveof 127.0.0.1:6379
- 启动主从Redis
查看运行情况
telnet localhost 6379 telnet localhost 6380
role:master
-------------
role:slave
master_host:127.0.0.1
master_port:6379
2、Redis哨兵模式(sentinel)
Redis主从模式虽然在主服务宕机后可以直接替换从服务,不过这需要手动操作,而使用哨兵模式则相当于有一个哨兵在帮你监控Redis服务,主库宕机后,会根据规则推选出一个从库来顶替主服务,从而实现系统正常运行。
- 下面配置三个Redis,一个主两个从,一个哨兵
mkdir redis-sentinel
cd redis-sentinel
cp redis/path/conf/redis.conf path/to/redis-sentinel/master.conf
cp redis/path/conf/redis.conf path/to/redis-sentinel/slave1.conf
cp redis/path/conf/redis.conf path/to/redis-sentinel/slave2.conf
touch sentinel.conf
- 设置主从
vim master.conf
port 63791
vim slave1.conf
port 63792
slaveof 127.0.0.1 63791
vim slave2.conf
port 63793
slaveof 127.0.0.1 63791
vim sentinel.conf
daemonize yes
port 26379
# 其中mastername为主节点名字,末尾的1表示在推举主节点的时候该端口在sentinel同意的情况下可升级为master
sentinel monitor mastername 127.0.0.1 63793 1
- 启动Redis
redis-server path/to/redis-sentinel/master.conf
redis-server path/to/redis-sentinel/slave1.conf
redis-server path/to/redis-sentinel/slave2.conf
redis-server path/to/redis-sentinel/sentinel.conf --sentinel
Redis集群
前面的Redis哨兵模式虽然在主从模式的基础上加上了监控的哨兵,可以自动切换主节点,但是依然是单点Redis,依旧是向一个Redis写数据,从库做备份。在日常生产环境中,单点Redis并发有限,遇到数据量大的情况容易降低性能,这时候我们就需要一个在多节点之间共享数据的工具,那就是Redis cluster,也就是Redis集群。Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令。
- 根据Redis官方文档,因为至少需要三个主节点,所以我们需要启动至少六个Redis服务,配置如下
主:master1 从 slave1 slaveof master1
主:master2 从 slave2 slaveof master2
主:master3 从 slave3 slaveof master3
mkdir redis-cluster
cd redis-cluster
mkdir master1 到 slave3 6个文件夹
cp redis.conf 到 master1 ... slave3
修改端口
分别配置3组主从关系
- 启动Redis集群
redis-6.2.6/src/redis-cli --cluster create 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376 --cluster-replicas 1