学习Redis(三)
一、安装部署
1、常规安装
1、安装
# wget http://download.redis.io/releases/redis-3.0.7.tar.gz
# tar xf redis-3.0.7.tar.gz
# cd redis-3.0.7
# make PREFIX=/usr/local/redis install
# cp redis_init_script /etc/init.d/redis
# chmod +x /etc/init.d/redis 2、修改配置文件
1) 修改启动脚本
# vim /etc/init.d/redis
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
cp /usr/local/redis-3.0.7/redis.conf /etc/redis/6379.conf
2) 修改配置文件
# vim /etc/redis/6379.conf
daemonize yes 3、启动服务
# /etc/init.d/redis start
2、salt-master批量安装
1、复制文件到salt目录
# cp redis-3.0.7.tar.gz salt/redis/files/
# cp 6379.conf salt/redis/files/
# cp /etc/init.d/redis salt/redis/files/ 2、编辑脚本文件
# vim redis.sls
redis-install:
file.managed: #调用file模块的managed方法
- name: /usr/local/src/redis-3.0.7.tar.gz #客户端的文件路径
- source: salt://redis/files/redis-3.0.7.tar.gz #服务器的文件路径
- user: root
- group: root
- mode: 755 cmd.run: #执行远程命令,使用cmd的run方法
- name: cd /usr/local/src/ && tar xf redis-3.0.7.tar.gz && cd redis-3.0.7 && make PREFIX=/usr/local/redis install- unless: test -d /usr/local/redis #若目录存在,不执行name模块
- require: #依赖
- file: redis-install #编译前要依赖redis-install模块执行成功 redis-config:
file.managed:
- name: /etc/redis/6379.conf #客户端的配置文件路径
- source: salt://redis/files/6379.conf #服务器的配置文件路径
- user: root
- group: root
- mode: 644 redis-service: #服务管理模块
file.managed:
- name: /etc/init.d/redis #客户端的启动脚本路径
- source: salt://redis/files/redis #服务器的启动脚本路径
- user: root
- group: root
- mode: 755 cmd.run:
- name: chkconfig --add redis && chkconfig redis on
- unless: chkconfig --list | grep redis #若redis已存在开机启动列表,不执行name模块 service.running: #服务启动模块
- name: redis
- enable: True
- watch: #监控的文件
- file: redis-config
- require: #服务启动依赖下面的模块(redis-install模块下cmd)
- cmd: redis-install
- cmd: redis-service
3、执行
# salt "node6.a.com" state.sls init.redis
二、redis数据类型格式
1、字符串(string)
6379> set k1 zhang3 #设置key和值,set都是字符串格式
6379> get k1 #查看key的值
6379> keys * #显示所有的key
6379> keys k? #匹配k开头的key
6379> exists k2 #判断key是否存在(0:不存在,非0:存在,key的数量)
6379> del k2 #删除指定的key(0:不存在,非0:存在,key的数量)
6379> type k1 #获取key的类型
6379> info #服务器的状态
6379> select 1 #切换数据库(默认有16个,0-15)
6379> flushall #清空所有数据
6379> append k1 ,wang5 #追加(字符串后面追加)
6379> incr n1 #自增1(若key不存在就创建,并设置值为1)
6379> decr n1 #自减1(自增或自减必须是数字)
6379> incrby n1 5 #自增指定的值(整数)
6379> decrby n1 5 #自减指定的值
6379> incrbyfloat n2 0.1 #自增指定的值(浮点数)
6379> mset k1 zhang3 k2 wang5 #批量创建key
6379> mget k1 k2 #批量获取key
6379> strlen k1 #获取key字符串的长度 2、哈希(hash)
6379> hset ha1 name tom #设置哈希表(ha1:哈希表,name:key1)
6379> hget ha1 name #查看哈希表key的值
6379> hgetall ha1 #查看哈希表key的所有值
6379> hmset ha1 name tom age 11 #批量创建哈希表
6379> hmget ha1 name age #批量查看哈希表key的值
6379> hmgetall ha1 #批量查看哈希表key的所有值
6379> hdel ha1 name #删除指定的key 3、列表(list)
6379> lpush list1 a #从左添加
6379> rpush list1 b #从右添加
6379> llen list1 #查看列表的长度
6379> lpop list1 #从左删除
6379> rpop list1 #从右删除
6379> lindex list1 -1 #查看最后一个元素
6379> lrange list1 3 #查看指定的元素
6379> ltrim list1 0 3 #只保留指定的元素 4、集合(set)
6379> sadd set1 a b c #创建无序集合
6379> smembers set1 #查看集合所有的值
6379> sismember set1 b #判断值是否在集合中(1:存在,0:不存在)
6379> sdiff set1 set2 #集合的差集(以set1位参考,去重复)
6379> sdiff set2 set1 #集合的差集(以set2位参考)
6379> sinter set1 set2 #集合的交集(共同的值)
6379> sunion set1 set2 #集合的并集(set1 + set2,去重的值)
6379> zadd nginx 1 a 2 b 3 c #创建有序集合
6379> zscore nginx a #查看指定的分数值
6379> zrange nginx 0 3 #查看指定范围的值(0:下标) 5、其他
Keyspace
db0:keys=2,expires=0,avg_ttl=0 (db0:数据库1,keys:key数量,expires:过期数量,avg_ttl:ttl数量)
三、 redis 消息队列
1、订阅
6379> SUBSCRIBE test 2、发布消息
6379> PUBLISH test hello 3、接受消息(订阅端)
6379> SUBSCRIBE test
3) "hello"
四、持久化
1、rdb(快照)
1) 介绍
rdb: 指定的时间内把内存的数据快照到文件,宕机时,会丢失部分数据
2) 配置
# vim redis.conf
save 900 1 #900秒内有1个key,触发快照
save 300 10 #300秒内有10个key,触发快照
save 60 10000 #60秒内有10000个key,触发快照
rdbcompression yes #是否压缩
rdbchecksum yes #是否CRC64校验
dbfilename dump.rdb #快照文件的名
dir /usr/local/redis #文件的路径 2、aof(命令日志)
1) 介绍
aof: 将所有执行过的命令保存在文件,类似mysql的binlog,宕机时,会丢失1秒数据
2) 配置
# vim redis.conf
appendonly yes #是否开启AOF模式
appendfilename "appendonly.aof" #aof文件名(路径:dir选项指定) 3、其他
SAVE: 阻塞保存
BGSAVE: 在后台保存,不阻塞
KILL -9: 会丢失上次保存后,到现在的数据
五、Redis主从
1、主从同步原理
主收到从的sync命令,在后台执行bgsave,将rdb文件发给从,从收到后,先清空数据,再将rdb载入到内存 2、配置主从(从库操作)
1) 永久生效
# vim 6379.conf
SLAVEOF 192.168.1.11 6379 2) 临时生效
6379> SLAVEOF 192.168.1.11 6379 #主的ip和端口 3、查看主从信息
6379> info
备注: 主从复制后,从库是只读模式,无法写数据
六、Redis集群
1、简介
① 客户端分片: 优势比较灵活,不存在单点故障,缺点添加节点,需要重新配置,数据要手动同步
② 代理分片: 由代理取数据,可为proxy配置算法,如Twemproxy
③ Redis Cluster:要3.0版本以上,无中心,会数据丢失
④ Coodis:豌豆荚的开源方案 2、配置集群
1) 环境规划
主节点 db01: 192.168.1.11:7001 db02: 192.168.1.11:7002 db03: 192.168.1.11:7003
从节点 db02: 192.168.1.11:7004 db03: 192.168.1.11:7005 db01: 192.168.1.11:7006
2) 创建目录和配置文件
# mkdir `seq 7001 7008`
# vim redis_7001.conf
bind 10.0.0.51
port 7001
daemonize yes
pidfile "/opt/redis/7001/redis_7001.pid"
logfile "/opt/redis/7001/redis_7001.log"
dbfilename "redis_7001.rdb"
dir "/data/redis/7001/"
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
cluster-enabled yes #开启集群模式
cluster-config-file nodes_7001.conf #集群node配置文件(动态更新)
cluster-node-timeout 15000 #集群的超时时间
3) 启动集群
# redis-server /opt/redis/7001/redis_7001.conf
# for i in `seq 7002 7008`;do redis-server /opt/redis/$i/redis_$i.conf;done 3、使用工具部署集群
1) 安装ruby环境
# yum install ruby rubygems
# gem install redis
2) 工具参数介绍
# redis-trib create #创建集群
# redis-trib reshard #重新分片
# redis-trib add-node #添加节点
# redis-trib del-node #删除节点
# redis-trib check #检测节点
3) 创建集群(前主后从)
# redis-trib create --replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 \
192.168.1.11:7004 192.168.1.11:7005 192.168.1.11:7006
4) 测试集群
# redis-cli -h 192.168.1.11 -c -p 7001
7001> set k1 tom #插入的数据,轮询写到集群
7001> cluster nodes #查看节点信息
7001> cluster info #查看集群信息
5) 添加新节点
# redis-trib add-node 192.168.1.11:7007 192.168.1.11:7001 #添加新节点(前新节点后集群节点)
# redis-trib reshard 192.168.1.11:7007 #添加后要重新分片(分片后,自动是主节点,4个主)
6) 添加新节点,并设置主从
# redis-trib add-node 192.168.1.11:7008 192.168.1.11:7001 #添加新节点
# redis-cli -h 192.168.1.11 -p 7008 #登录到节点
7008> CLUSTER replicate 19a5bb65 #指定主的id号
7008> CLUSTER nodes #查看节点信息
七、Redis的管理工具
1、phpredisadmin工具
1、介绍
web界面,git地址: https://github.com/ErikDubbelboer/phpRedisAdmin 2、安装部署
1) 环境依赖
# yum install httpd php php-redis
2) 下载并安装
# cd /var/www/html/
# git clone https://github.com/erikdubbelboer/phpRedisAdmin.git
# mv phpRedisAdmin admin
# cd admin
# git clone https://github.com/nrk/predis.git vendor #依赖包 3、修改配置文件
# cd admin/includes/
# cp config.sample.inc.php config.inc.php
# vim config.inc.php
$config = array(
'servers' => array(
array(
'name' => 'local server',
'host' => '192.168.1.11', #redis的ip
'port' => 6379,
'filter' => '*', // Optional Redis authentication.
//'auth' => 'redispasswordhere' #redis的密码
),
# vim /var/www/html/admin/includes/common.inc.php
#mb_internal_encoding('utf-8'); #注释此行 4、启动http服务
# /etc/init.d/httpd start 5、访问
http://192.168.1.11/admin: 6、配置多个redis
# vim config.inc.php
$config = array(
'servers' => array(
array(
'name' => '7001',
'host' => '192.168.1.11', #redis的ip
'port' => 7001,
'filter' => '*',
'auth' => '123456' #redis的密码
),
array(
'name' => '7002',
'host' => '192.168.1.11',
'port' => 7002,
'filter' => '*',
'auth' => '123456'
),
2、rdbtools管理工具
1、介绍
Python编写的,git地址: https://github.com/sripathikrishnan/redis-rdb-tools 2、安装部署
# yum install python-pip
# pip install rdbtools
# cd /opt/7001/
# rdb -c memory dump_7001.rdb > memory.csv
3、saltstack管理redis
模块名称: redismod
官方文档: https://docs.saltstack.com/en/latest/ref/modules/all/index.html
4、codis管理redis
1、介绍
豌豆荚产品,快速分布式缓存,git地址: https://github.com/CodisLabs/codis 2、Codis的组成部分
① Codis Proxy(codis-proxy): 负责代理转发客户端的请求,前端可用haproxy做负载均衡,无状态,部署多个实例
② Codis Dashboard(codis-config): web集群管理工具,支持codis-proxy、codis-server的添加、删除、数据迁移
③ Codis Redis (codis-server): 基于redis-3.2.8开发,支持redis 主从,基于redis-sentinel实现主从自动切换
④ ZooKeeper/Etcd: 存放数据路由表,节点的元信息,接受API命令传送给各个codis-proxy
⑤ Codis Admin: 集群管理的命令行工具
⑥ Codis FE: 集群管理界面
⑦ Storage: 集群状态提供外部存储 3、安装go语言环境
1) yum安装
# yum install golang
# mkdir /opt/gopath #保存go环境的路径
# vim /etc/profile
export GOPATH=/opt/gopath
# source /etc/profile
# go version
2) 源码包安装
# wget https://storage.googleapis.com/golang/go1.15.6.linux-amd64.tar.gz
# tar -xzf go1.15.6.linux-amd64.tar.gz -C /usr/local
# vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
# source /etc/profile
# go version 4、安装部署zookeeper
1) 安装Java环境
# wget http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm
# rpm -ivh jdk-8u73-linux-x64.rpm
# java -version
2) 安装zookeeper
# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
# tar xf zookeeper-3.4.6.tar.gz
# mv zookeeper-3.4.6 /usr/local/zookeeper
3) 修改配置文件
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg /opt/zoo.cfg
# mkdir /opt/{zk1,zk2,zk3}
# echo 1 > /opt/zk1/myid #创建id
# echo 2 > /opt/zk2/myid #每个服务器的ID是不同的
# echo 3 > /opt/zk3/myid
# vim zoo.cfg
dataDir=/opt/zk1 #保存数据目录
clientPort=2181 #客户端连接的端口
server.1 = 192.168.1.11:2887:3887
server.2 = 192.168.1.11:2888:3888
server.3 = 192.168.1.11:2889:3889
# cp zoo.cfg /opt/zk1/zk1.cfg
# cp zoo.cfg /opt/zk2/zk2.cfg
# cp zoo.cfg /opt/zk3/zk3.cfg
# vim opt/zk2/zk2.cfg
dataDir=/opt/zk2 #每个服务对应不同的目录
clientPort=2182
# vim opt/zk2/zk2.cfg
dataDir=/opt/zk3
clientPort=2183
4) 配置文件解析
# vim zoo.cfg
tickTime=2000 #心跳时间(毫秒)
initLimit=10 #初始通信时限(初始连接时最多心跳数10*2000)
syncLimit=5 #同步通信时限(通讯间最多心跳数5*2000=10秒)
dataDir=/opt/zk1 #数据保存目录
dataLogDir=var/log/zookeeper #日志目录
clientPort=2181 #客户端连接的端口
server.1 = 192.168.1.11:2887:3887 #集群id、ip、端口
server.2 = 192.168.1.11:2888:3888 #server.1(1是id)
server.3 = 192.168.1.11:2889:3889 #2889:集群间通讯端口,3889:选举端口
maxClientCnxns=60 #客户端的连接数(默认60)
minSessionTimeout=30 #最小的会话超时时间(默认2*2000)
maxSessionTimeout=120 #最大的会话超时时间(默认20*2000)
autopurge.snapRetainCount=3 #保存3个快照,3个日志文件
autopurge.purgeInterval=1 #1小时自动清理一次
5) 启动服务
# /usr/local/zookeeper/bin/zkServer.sh start /opt/zk1/zk1.cfg
# /usr/local/zookeeper/bin/zkServer.sh start /opt/zk2/zk2.cfg
# /usr/local/zookeeper/bin/zkServer.sh start /opt/zk3/zk3.cfg
6) 查看节点状态
# /usr/local/zookeeper/bin/zkServer.sh status /opt/zk1/zk1.cfg
# /usr/local/zookeeper/bin/zkServer.sh status /opt/zk2/zk2.cfg
# /usr/local/zookeeper/bin/zkServer.sh status /opt/zk3/zk3.cfg
Mode: leader #这个是主,其他2个是从
7) 连接到节点
/usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.11:2181
[zk: 192.168.1.11:2181(CONNECTED) 0] ls / #查看数据 5、安装codis
1) 安装
# go get -u -d github.com/CodisLabs/codis/tree/release2.0
# cd /opt/gopath/src/github.com/CodisLabs/codis/
# make && make gotest
# ls bin/
codis-config codis-proxy codis-server
2) 命令解析
# codis-config -h
-c #配置文件地址
-L #日志文件地址
--log-level= #日志级别(debug<info默认<warn<error<fatal)
server #redis 服务器组管理
slot #slot管理
dashboard #启动dashboard服务
action #事件管理(只有删除历史事件的日志)
proxy #proxy管理
# codis-proxy -h
-c #配置文件地址
-L #日志文件地址
--log-level= #输出日志级别
--cpu= #proxy占用cpu核数(默认1,建议核数1/2到2/3
--addr= #proxy的redis server监听的地址(ip或域名:port)
--http-addr= #proxy的调试信息启动的http server(http://192.168.1.11/debug/vars)
# codis-server -h
codis-server [/path/to/redis.conf] [options] #指定redis配置文件,选项
-v #显示版本
-h #获取帮助
示例
# codis-server /etc/redis/6379.conf
# codis-server --port 7777
# codis-server --port 7777 --slaveof 127.0.0.1 8888
# codis-server /etc/myredis.conf --loglevel verbose 6、部署dashboard
1) 修改配置文件
# vim config.ini
coordinator=zookeeper #zookeeper或etcd
zk=192.168.1.11:2181,192.168.1.11:2182,192.168.1.11:2183
product=mycodis #项目名称
dashboard_addr=192.168.1.11:8090 #代理的端口(代理连接dashboard)
password=123456 #redis的密码(代理使用的)
backend_ping_period=5
session_max_timeout=1800
session_max_bufsize=131072
session_max_pipeline=1024
zk_session_timeout=30000
proxy_id=proxy_1 #代理的id(id号唯一)
2) 启动dashboard
方法1
# codis-config dashboard & #不加-c时,默认读取当前目录下的config.ini
方法2
# nohup codis-config dashboard --addr 192.168.1.11:8090 \
--http-log /var/log/codis-dashboard-http > /var/log/codis-dashboard &
3) 启动报错处理
# tail /var/log/codis-dashboard #查看日志
报错: create zk node failed #删除dashboard路径
[zk: ] rmr /zk/codis/db_mycodis/dashboard)
4) 浏览访问
http://192.168.1.11:18087 7、初始化槽位
1) 初始化槽位
# codis-config slot init -f #在zookeeper创建slot信息(-f 强制创建)
2) web界面查看槽位
8、通过codis-server启动redis
1) 创建redis数据目录
# mkdir -p /opt/redis/638{1..4}
2) 编辑配置文件
# vim redis_6381.conf
bind 192.168.1.11
port 6381
daemonize yes
pidfile /opt/redis/6381/redis_6381.pid
logfile /opt/redis/6381/redis_6381.log
dbfilename dump_6381.rdb
dir /opt/redis/6381/
requirepass 123456
maxmemory 1.5g #设置最大内存,否则codis无法使用
# cp redis_6381.conf redis_6382.conf
# cp redis_6381.conf redis_6383.conf
# cp redis_6381.conf redis_6384.conf
# sed -i 's/6381/6382/g' redis_6382.conf
# sed -i 's/6381/6383/g' redis_6383.conf
# sed -i 's/6381/6384/g' redis_6384.conf
3) 启动redis服务
# codis-server redis_6381.conf
# codis-server redis_6382.conf
# codis-server redis_6383.conf
# codis-server redis_6384.conf 9、添加redis server组
1) 创建组
# codis-config server -h #命令帮助
# codis-config server add 1 192.168.1.11:6381 master #添加组id是1,ip和端口,角色master
# codis-config server add 1 192.168.1.11:6382 slave #组id要大于等于1的整数
# codis-config server add 2 192.168.1.11:6383 master #添加组id是2,ip和端口,角色master
# codis-config server add 2 192.168.1.11:6384 slave
2)查看组信息
# codis-config server list
3) web 界面(web界面可添加、删除从,提升从为主)
4) 验证主从状态
# redis-cli -h 192.168.1.11 -p 6381 -a 123456 info #状态master
# redis-cli -h 192.168.1.11 -p 6382 -a 123456 info #状态slave
# redis-cli -h 192.168.1.11 -p 6383 -a 123456 info
# redis-cli -h 192.168.1.11 -p 6384 -a 123456 info
10、分配槽位
1) 分配槽位
# codis-config slot range-set 0 511 1 online #分配槽位到组id1(共1024个)
# codis-config slot range-set 512 1023 2 online #分配槽位到组id2
2) web界面查看
11、部署codis-proxy
1) 修改配置文件
# cp config.ini config_node1.ini
# cp config.ini config_node2.ini
# sed -i 's#proxy_1#proxy_2#g' config_node2.ini
2) 启动服务
# nohup codis-proxy -c config_node1.ini -L /var/log/codis-1.log
--log-level=error --cpu=1 --addr=192.168.1.11:7001 --http-addr=192.168.1.11:8001 &
# nohup codis-proxy -c config_node2.ini -L /var/log/codis-2.log
--log-level=error --cpu=1 --addr=192.168.1.11:7002 --http-addr=192.168.1.11:8002 &
3) web 查看
codis-proxy是无状态的不保存数据,数据保存在zookeeper,可启动多个
4) 若codis-proxy未启动,需要执行下面操作
刚启动的codis-proxy默认是offline状态,只有online状态才会对外提供服务
# codis-config -c config.ini proxy online proxy_1
# codis-config -c config.ini proxy online proxy_2
5) 连接codis-proxy进行测试
# for i in {1..1000};do redis-cli -h 192.168.1.11 -p 7001 -a 123456 \
set k_${i} v_${i};echo ${i};done
# for i in {1..1000};do redis-cli -h 192.168.1.11 -p 7002 -a 123456 \
set k_${i} v_${i};echo ${i};done
12、数据迁移
1) 命令迁移
# codis-config slot migrate 100 200 2 --delay=10 #把100-200的slot数据,迁移到组2,每迁移一个key延时10毫秒
2) web界面迁移
3) 数据重新均衡发布
# codis-config slot rebalance
4) 把Redis数据迁移到codis
使用 redis-port 工具
https://github.com/CodisLabs/redis-port
八、Redis配置文件解析
# vim redis.conf
include /path/to/local.conf #支持加载其他配置文件
bind 192.168.1.11 127.0.0.1 #绑定ip地址
port 6379 #端口号
protected-mode yes #开启保护模式
tcp-backlog 511 #等待请求数,队列数(受somaxconn和tcp_max_syn_backlog限制)
unixsocket /tmp/redis.sock #监听套接字
unixsocketperm 700 #文件的权限
timeout 0 #客户端空闲断开时间(0:永不断开)
tcp-keepalive 300 #多少秒检查客户端是否关闭
daemonize no #是否后台运行
supervised no #用upstart和systemd管理Redis守护进程
pidfile /var/run/redis_6379.pid #pid文件路径
loglevel notice #日志的级别(debug,verbose,notice,warning)
logfile /var/log/redis.log #日志文件名及位置
syslog-enabled no #是否把日志记录到系统日志(用于日志收集)
syslog-ident redis #syslog标识符
syslog-facility local0 #日志的来源
databases 16 #数据库的数量
always-show-logo yes #是否一直显示logo
save 900 1 #900秒内1个key,触发rdb
save 300 10 #300秒内10个key,触发rdb
save 60 10000 #60秒内10000个key,触发rdb
stop-writes-on-bgsave-error yes #持久化错误后,是否停止写操作
rdbcompression yes #是否压缩 rdb 文件(消耗cpu)
rdbchecksum yes #是否效验rdb文件(性能会下降)
dbfilename dump.rdb #rdb文件名
rdb-del-sync-files no #rdb文件是否删除同步锁
dir ./ #rdb 文件的目录
slaveof 192.168.1.11 8000 #主从复制(主的ip和端口)
masterauth 123456 #主库的密码
masteruser <username> #主库的用户名(5.0版本)
slave-serve-stale-data yes #从和主断开或同步数据,yes:正常服务,数据是旧的,no:不提供服务,,返回错误
slave-read-only yes #从库只读
repl-diskless-sync no #rdb文件同步策略,硬盘(主写到磁盘,再发送从),无盘(写到从的socket)
repl-diskless-sync-delay 5 #无盘复制时,延时时间(5秒)
repl-ping-slave-period 10 #从每隔10秒向主发送ping包
repl-timeout 60 #主从复制超时时间
repl-disable-tcp-nodelay no #主从是否禁用tcp_nodelay(yes:合并小包统一发送,节省带宽,数据会延时,no:不合并小包)
repl-backlog-size 1mb #复制缓存区的大小(从重接主,同步缓冲区数据)
repl-backlog-ttl 3600 #复制缓存区的时间
replica-priority 100 #从库优先级(选主时用,数字越小优先级越高)
min-replicas-to-write 3 #从小于3个,主禁止写入数据
min-replicas-max-lag 10 #延时小于10秒的从才认为是健康的从库
slave-announce-ip 5.5.5.5 #指定从库的公网ip(NAT或端口转发)
replica-announce-port 1234 #指定从库的公网端口
requirepass 123456 #redis连接密码
rename-command set "sset" #命令重命名
rename-command keys "" #屏蔽掉命令
maxclients 10000 #客户端连接数量
maxmemory 3G #最大使用内存
maxmemory-policy volatile-lru #设置内存清理策略
maxmemory-samples 5 #LRU和最小TTL算法的样本个数(样本越大越准确)
lazyfree-lazy-eviction no #内存满,是否被动删除
lazyfree-lazy-expire no #过期key,是否被动删除
lazyfree-lazy-server-del no #内部删除(rename时,删除destKey)
replica-lazy-flush no #从库接收完rdb文件后flush(清空数据)
appendonly no #是否开启AOF模式
appendfilename "appendonly.aof" #AOF文件名
appendfsync everysec #AOF文件刷新策略(always:每次写入,everysec:每秒写入,no:系统写入)
no-appendfsync-on-rewrite no #在rewrite(重写)期间,后台是否调用fsync(no:调用,yes:不调用,暂存在内存)
auto-aof-rewrite-percentage 100 #自动重写的百分比
auto-aof-rewrite-min-size 64mb #自动重写AOF文件的大小
aof-load-truncated yes #yes:启动时加载不完整的aof文件,生成日志,no:不加载,拒绝启动
aof-use-rdb-preamble yes #rdb和aof混合开启(先加载rdb,在rdb尾部时间加载aof文件)
lua-time-limit 5000 #Lua 脚本的最大执行时间(5000毫秒)
cluster-enabled yes #是否开启集群模式
cluster-config-file nodes-6379.conf #集群配置文件名,自动生成,不要手改
cluster-node-timeout 15000 #集群节点超时时间(集群之间的通信时间,超时后,认为节点宕掉)
cluster-slave-validity-factor 10 #从选主的条件倍数(超过,节点断线时间*条件倍数=取消资格)
cluster-migration-barrier 1 #主下最少1个从(防止主裸奔,若主有多个从,满足自身后,可分配给其他主当从)
cluster-require-full-coverage yes #yes:所有的槽位分配完,集群才ok,no:不分配完,也可以服务(不推荐)
cluster-announce-ip #集群节点对外的ip(外网ip,用于docker环境,)
cluster-announce-port #集群节点对外的端口
cluster-announce-bus-port #集群节点对外的通讯端口
slowlog-log-slower-than 10000 #慢日志记录(单位微秒,1000000=1秒,慢日志记录在内存)
slowlog-max-len 128 #慢查询日志长度(最大条数,会自动删除旧记录)
latency-monitor-threshold 0 #设置延迟监控阈值(单位毫秒,0:关闭)
notify-keyspace-events "" #事件通知(默认禁用,开启消耗cpu,可设置不同类型的通知)
hash-max-ziplist-entries 512 #哈希的元素数量,小于512用ziplist,大于用hashtable
hash-max-ziplist-value 64 #哈希的值长度,小于64用ziplist,大于用hashtable
list-max-ziplist-size -2 #正数:ziplist元素个数,负数:限制ziplist大小
list-compress-depth 0 #ziplist节点压缩
set-max-intset-entries 512 #无序集合的元素数量,小于512用intset,大于用set
zset-max-ziplist-entries 128 #有序集合的元素数量,小于128用ziplist,大于用zset
zset-max-ziplist-value 64 #有序集合的值长度,小于64用ziplist,大于用zset
hll-sparse-max-bytes 3000 #HyperLogLog字节限制,值小于3000用sparse(稀疏数据结构),大于用dense(稠密)
activerehashing yes #是否开启rehash功能
client-output-buffer-limit normal 0 0 0 #客户端输出缓冲区限制(普通客户端)
client-output-buffer-limit slave 256mb 64mb 60 #超过256m,或超过64m持续60秒,断开连接(复制客户端)
client-output-buffer-limit pubsub 32mb 8mb 60 #超过32m,或超过8m持续60秒,断开客户端连接(订阅频道的客户端)
proto-max-bulk-len 512mb #客户端查询的缓存大小
hz 10 #redis执行任务的频率(1s除以hz)
aof-rewrite-incremental-fsync yes #AOF重写时,子进程每32M数据执行一次fsync(同步)
activedefrag yes #是否启用碎片整理
active-defrag-ignore-bytes 100mb #当碎片达到 100mb 时,开启碎片整理
active-defrag-threshold-lower 10 #当碎片超过 10% 时,开启碎片整理
active-defrag-threshold-upper 100 #当碎片超过 100% 时,则尽最大努力整理
active-defrag-cycle-min 25 #自动整理占用CPU最小百分比
active-defrag-cycle-max 75 #自动整理占用CPU最大百分比
学习Redis(三)的更多相关文章
- 分布式缓存技术redis学习(三)——redis高级应用(主从、事务与锁、持久化)
上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性.目录如下: 安全性设置 设置客户端操作秘密 客户 ...
- redis学习教程三《发送订阅、事务、连接》
redis学习教程三<发送订阅.事务.连接> 一:发送订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.Redi ...
- openresty 学习笔记三:连接redis和进行相关操作
openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...
- Redis学习——Redis事务
Redis和传统的关系型数据库一样,因为具有持久化的功能,所以也有事务的功能! 有关事务相关的概念和介绍,这里就不做介绍. 在学习Redis的事务之前,首先抛出一个面试的问题. 面试官:请问Redis ...
- Redis学习——Redis持久化之AOF备份方式保存数据
新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...
- 深入学习Redis(1):Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- 深入学习Redis(5):集群
前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述问 ...
- 深入学习Redis(4):哨兵
前言 在 深入学习Redis(3):主从复制 中曾提到,Redis主从复制的作用有数据热备.负载均衡.故障恢复等:但主从复制存在的一个问题是故障恢复无法自动化.本文将要介绍的哨兵,它基于Redis主从 ...
- 深入学习Redis(3):主从复制
前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...
- 深入学习Redis(2):持久化
前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可 ...
随机推荐
- 【C#基础概念】Ineterface 接口的设计原则
接口设计方式 自顶向下 (如图所示),自底向上(发现类需要结构了就声明一个接口). 接口的作用 用来解耦.继承 接口的本质
- C#委托Action、Action<T>、Func<T>、Predicate<T>系统自带的委托
C#委托Action.Action<T>.Func<T>.Predicate<T> CLR环境中给我们内置了几个常用委托Action. Action<T& ...
- (二) operator、explicit与implicit 操作符重载
有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成把两个整 ...
- oracle中临时表的用法详解
转至:https://blog.csdn.net/mystonelxj/article/details/85010856?utm_medium=distribute.pc_relevant.none- ...
- android --一个简单的登录界面
MainActivity.java package com.example.empty_project; import androidx.appcompat.app.AppCompatActivity ...
- redis存储token
redis存储token 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章http://www.javaman.cn/sb2/redis-token 在实际开发中,token需要保 ...
- 『现学现忘』Docker基础 — 11、Docker安装的问题补充
目录 1.问题复现 2.解决冲突 3.重新安装docker-ce-selinux 4.安装Docker-ce 5.总结 通过yum安装Docker的时候,安装20版本的Docker没有出现问题,在安装 ...
- 【Java分享客栈】一个包装过简历的新同事写完微信支付引起事故后果断离职了
前言 挺长时间没发文了,因为公司有一个紧急项目要赶进度,加班如吃饭喝水,久违的进入到码农的状态. 之所以抽空来发个文,是这个项目才刚上线,时间不长却因为一位新同事的代码引起了生产环境的事故,造成了一批 ...
- PHP实现二维数组(或多维数组)转换成一维数组
1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...
- linux定时任务 - at定时任务
at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行作业.atd守护进程会检查系统上的一个特殊目录来获取at命令的提交的作业,默认情况下,atd守护进程每60秒检查一 ...