Redis 学习笔记一
一、redis 安装
1.1、安装环境
1、Linux centos 系统
2、安装gcc环境,一般情况linux 系统自带该环境,也可自行下载安装使用新版本;环境检测如下:
命令:gcc -v
1.2、安装redis
1、下载redis linux 下安装包,选择合适的安装包,这里使用redis-5.0.5.tar.gz
2、解压软件包,如下:
tar -zxvf redis-5.0.5.tar.gz
3、编译,进入redis 解压目录,输入编译命令,如下:
make
4、安装redis ,并指定安装路径
5、查看redis安装路径文件结构
7、复制redis 默认配置文件到安装目录下,如下图:
cp /opt/redis/redis-5.0.5/redis.conf /opt/redis/install/
二、redis 基本命令
2.1、redis 相关命令
1、redis 启动,命令:./bin/redis-server redis.conf
2、查询redis 进程,命令:ps -ef|grep redis
3、连接redis 服务
本地连接命令:./bin/redis-cli
远程连接命令:./bin/redis-cli -h 主机ip地址 -p 端口 -a 密码
如: ./bin/redis-cli -h 192.168.137.5 -p 6379 -a abc123
4、windows客户端连接
可以下载windows客户端RedisClient连接redis ,如: ,安装后运行,并配置redis服务器地址,账号,则可登录redis :
5、关闭redis服务
A、查询redis服务进程号,通过kill 命令闭关服务
B.使用redis 命令关闭redis
三、redis 配置文件
3.1、redis.conf 文件配置
1、bind 指令:绑定IP地址,默认是127.0.0.1,设置绑定 IP ,默认是本机,绑定服务器地址后,方便访问,示例:bind 192.168.137.5
2、protected-mode 指令: 保护模式,默认启用,需要配置绑定ip ,外网才能访问,否则本机使,设为no,则不需要绑定ip ,外网也可以访问,示例:protected-mode yes
3、port 指令: 指定redis 运行端口号,示例:port 6379
4、daemonize 指令: 是否使用守护进程 默认为no ,yes 为开启,开启后,会将进程号写入一个pid文件,示例:daemonize yes
5、databases 指令:配置16个数据库,从0开始,0-15 ,可以选择一个连接,示例:databases 16
6、requirepass 指令:设置redis 连接密码 , 默认关闭,示例:requirepass abc123
7、maxclients 指令:客户端最大连接数,示例:maxclients 10000
8、tcp-backlog 指令:TCP连接中已完成队列(完成三次握手之后)的长度,默认值:511,当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定,示例:tcp-backlog 511
9、timeout 指令:此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。 单位秒,示例:timeout 180
10、tcp-keepalive 指令:keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值 ,默认值300,单位秒,示例:tcp-keepalive 300
11、pidfile 指令:redis进程号文件,示例:pidfile /var/run/redis_6379.pid
12、loglevel 指令:指定了服务端日志的级别。级别包括:
debug(很多信息,方便开发、测试),
verbose(许多有用的信息,但是没有debug级别信息多),
notice(适当的日志级别,适合生产环境),
warn(只有非常重要的信息)
13、logfile 指令:指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null。示例:logfile /logs/redis/redis-server.log
14、always-show-logo 指令:显示logo,示例:always-show-logo yes
15、Save 指令:快照配置,每seconds 秒有changes 次数据更改,就将数据持久化到磁盘,如下:
save 900 1
save 300 10
save 60 10000
16、rdbcompression 指令:指定数据存储到本地时,是否压缩,默认打开,会消息CPU资源,但关闭也会导致文件过大,示例:rdbcompression yes
17、Dbfilename 指令:指定本地数据库文件
18、dir 指令:数据库文件存放目录,默认为redis 当前安装目录
19、Masterauth 指令:主从认证密码,示例:masterauth abc123
20、Maxmemory 指令:redis 最大内存,单位为字节 ,设置值不能超过系统内存,根据内存不小设置,示例:maxmemory 1000000000
21、maxmemory-policy 指令:设置内存策略,默认是不删除数据,策略选择如下:
# 以下是LRU 内存溢出处理机制
# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
# 设定超时时间的key,删除最不常用的key
# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
# 所有key 中,删除最不常用的key ,这是最广泛使用的策略
# allkeys-lru -> Evict any key using approximated LRU.
# 从所有配置超时时间key中,驱遂使用最少的键
# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
# 所有key中,使用驱遂最少的键
# allkeys-lfu -> Evict any key using approximated LFU.
# 已设定超时时间key 中,随机删除
# volatile-random -> Remove a random key among the ones with an expire set.
# 所有key 中,随机删除
# allkeys-random -> Remove a random key, any key.
# 将所有设置超时时间的key排序,删除马上超时的key
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# 设置属性,则不会删除,溢出时,直接报错
# noeviction -> Don't evict anything, just return an error on write operations.
示例:maxmemory-policy allkeys-lru
22、slaveof 指令:配置从redis 指向主redis ,示例:slaveof 192.168.3.5 6379
3.2、sentinel.conf 配置文件
1、sentinel monitor指令:哨兵监控,选择新的主redis需要几个哨兵投票,配置基数个哨兵,否则可能出现循环;
格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
示例:sentinel monitor mymaster 192.168.137.5 6379 2
2、sentinel auth-pass 指令:如果redis配置了密码,那这里必须配置认证,否则不能自动切换;
格式:sentinel auth-pass <master-name> <password>
示例:sentinel auth-pass mymaster abc123
3、sentinel down-after-milliseconds指令:master或者slave多少时间(默认30秒)不能使用标记为down状态。
格式:sentinel down-after-milliseconds <master-name> <milliseconds>
示例:sentinel down-after-milliseconds mymaster 10000
4、sentinel parallel-syncs 指令:这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长, 但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态
格式:sentinel parallel-syncs <master-name> <numreplicas>
示例:sentinel parallel-syncs mymaster 1
5、sentinel failover-timeout 指令:若哨兵在配置值内未能完成故障转移操作,则任务本次故障转移失败。
格式:sentinel failover-timeout <master-name> <milliseconds>
示例:sentinel failover-timeout mymaster 180000
四、redis 主从配置
4.1、配置主redis服务器
打开redis配置文件,配置基本参数,特别需要配置主从密码,相关参考三中指命令;6379为主,6380为从;
Masterauth abc123
Slaveof 192.168.137.4 6379
登录主服务器,查看redis信息:命令:info Replication
4.2、登录主服务器
使用命令将值存入主redis中,再查看从服务器是否有值,如下:
用客户端登录从服务器查看,值已存在,主从成功复制数据
默认情况下,从redis是不能存入数据的,配置slave-read-only no
五、redis 哨兵模式配置
5.1、配置一主二从redis服务器
参考四中配置,如图:
登录查看信息:
5.2、配置哨兵
bind 192.168.137.5
port 26379
daemonize yes
sentinel monitor mymaster 192.168.137.5 6379 2
sentinel auth-pass mymaster abc123
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
运行哨兵:
./bin/redis-sentinel ./sentinel.conf
./bin/redis-sentinel ./sentinel.conf --port 26380
./bin/redis-sentinel ./sentinel.conf --port 26381
查看进程:
登录哨兵查看信息:
./bin/redis-cli -h 192.168.137.4 -p 6379 -a abc1234
5.3、spring boot 配置哨兵模式连接
如下:
# spring boot 整合redis配置 spring: redis: host: 192.168.137.5 port: 6379 password: abc123 database: 1 timeout: 110000 jedis: pool: # 连接池最大连接数(使用负值表示没有限制 max-active: 1024 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: 10000 # 连接池中的最大空闲连接 max-idle: 200 # 连接池中的最小空闲连接 min-idle: 10 #哨兵配置 sentinel: master: mymaster nodes: - 192.168.137.5:26379 - 192.168.137.5:26380 - 192.168.137.5:26381
六、redis 集群搭建
6.1、自动搭建redis集群环境
1、环境配置,在之前配置下,需要安装ruby环境
2、ruby环境安装
1)、官方下载ruby安装包,http://www.ruby-lang.org/en/downloads/
2)、解压安装ruby
解压:tar -zxvf ruby-2.7.0.tar.gz
配置:
./configure --prefix=/opt/ruby/install/ --with-openssl-dir=/opt/openssl/openssl-1.0.2j
编译:make
安装:make install
查看安装版本:./bin/ruby -v
3)、配置环境
输入命令vi /etc/profile,在文件当中PATH当中加入安装Ruby的bin目录路径。然后保存执行命令:source /etc/profile
3、配置redis三主三从,共6台redis ,配置文件如下:
bind 192.168.137.4 # 设置当前节点主机地址 port 7002 # 设置客户端连接监听端口 pidfile /opt/reddis/install/cluster/7002/redis_7002.pid # 设置 Redis 实例 pid 文件 daemonize yes # 以守护进程运行 Redis 实例 cluster-enabled yes # 启用集群模式 cluster-node-timeout 15000 # 设置当前节点连接超时毫秒数 cluster-config-file nodes-7001.conf # 设置当前节点集群配置文件路径
修改IP与端口,形成6台机器
6.2、使用自动工具搭建集群
1、使用redis-cli --cluster create 命令直接搭建,如下:
./bin/redis-cli --cluster create 192.168.137.4:7001 192.168.137.4:7002 192.168.137.4:7003 192.168.137.4:8001 192.168.137.4:8002 192.168.137.4:8003 --cluster-replicas 1
登录节点查看集群信息:./bin/redis-cli -c -h 192.168.137.4 -p 7001
输入:cluster info
查看集群节点:cluster nodes
查看集群命令帮助:cluster help
2、集群相关命令
修复分配槽问题:
./bin/redis-cli --cluster fix 192.168.137.4:7001
检测集群槽分配情况:
./bin/redis-cli --cluster check 192.168.137.4:7002
重新分配:
./bin/redis-cli --cluster reshard 192.168.137.4:7001
查看帮助:./bin/redis-cli --cluster help
6.3、springboot 配置集群redis 访问
# spring boot 整合redis配置
spring:
redis:
cluster:
nodes:
- 192.168.137.4:7001
- 192.168.137.4:7002
- 192.168.137.4:7003
七、redis相关命令
参考redis官网:http://www.redis.cn/