一、配置和使用Redis:
- 配置文件目录:/etc/redis.conf
基本配置项 # INCLUDES #
网络配置项 # NETWORK #
一般配置项 # GENERAL #
持久化相关配置 # SNAPSHOTTING #
复制相关的配置 # REPLICATION #
安全相关配置 # SECURITY #
Limit限制相关的配置 # LIMITS #
LUA脚本相关配置 # LUA SCRIPTING #
集群相关配置 # REDIS CLUSTER #
监控相关配置项 # LATENCY MONITOR #
SlowLog慢日志相关的配置 # SLOW LOG #
INCLUDES事件通知 # EVENT NOTIFICATION #
Advanced高级配置 # ADVANCED CONFIG #
1、通用配置项:
daemonize, 是否以守护方式运行
supervised, 运行级别
loglevel, 日志级别
pidfile, pid文件位置
logfile,日志文件位置
databases:设定数据库数量,默认为16个,每个数据库的名字均为整数,从0开始编号,默认操作的数据库为0;
切换数据库的方法:SELECT <dbid>
2、网络配置项:
bind IP 绑定ip,监听地址
port PORT 监听地址端口,默认6379
protected-mode 工作于保护模式,在没有绑定或没有启用认证时候,启用此选项,只能本地访问
tcp-backlog 后援队列
unixsocket 如果本机到本机通信,可以监听一个文件,更高效
timeout:客户端连接的空闲超时时长;
tcp-keepalive tcp的保持连接
3、安全配置:
requirepass <PASSWORD> 认证设置密码
rename-command <COMMAND> <NEW_CMND_NAME> 修改名称
在AOF或Replication环境中,不推荐使用;
4、Limits限制相关的配置:
maxclients 最大并发连接数
maxmemory <bytes> 最大可使用物理内存
maxmemory-policy noeviction 内存淘汰策略
淘汰策略:
volatile-lru 把带有EX过期标记的键,基于LRU算法淘汰掉。
allkeys-lru 把所有的键,基于LRU算法淘汰掉。volatile-ttl, 把带有EX标记的键,离终结时间近的淘汰
noeviction 不淘汰
maxmemory-samples 5 淘汰算法运行时的采样样本数,一次选择5个然后淘汰;
5、SlowLog慢查询日志相关的配置:
slowlog-log-slower-than 10000 查询时间超出多少微秒,是慢查询
单位是微秒,1000微秒=0.01秒;
slowlog-max-len 128 查询最大多少字节
SlowLog记录的日志最大条目;
6、ADVANCED事件配置:
hash-max-ziplist-entries 512 一个数组最多有多少元素
hash-max-ziplist-value 64 一个元素有多少值
设置ziplist的键数量最大值,每个值的最大空间;
- 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
发布队列输出缓冲大小 - <hard-limit>硬限制
- <soft-limit>软限制
- <soft-limit seconds>软限制超时时长
二、使用命令
1、redis-cli命令:
- 格式: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h HOST 主机
-p PORT 端口
-a PASSWORD 密码
-n DBID
2、与Connection连接相关命令:
help @connection
AUTH <password> 验证
ECHO <message>
PING 测试ping
QUIT 退出
SELECT dbid
3、清空数据库相关命令:
FLUSHDB:Remove all keys from the current database
清空当前数据库;
FLUSHALL:Remove all keys from all databases
清空所有数据库;
- 注意:谨慎使用!!!!!
4、Server相关的命令:
CLIENT GETNAME
*CLIENT KILL
CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
*CLIENT LIST
CLIENT PAUSE
CLIENT PAUSE timeout
CLIENT REPLY
CLIENT SETNAME:设置当前连接的名字
SHUTDOWN [NOSAVE|SAVE]
CONFIG GET 获取设置
CONFIG RESETSTAT 重置各自计数器
CONFIG REWRITE 内存中的设置覆盖配置文件
CONFIG SET 设定
INFO:服务器状态信息查看;分为多个secion;
INFO [section]
5、示例:配置参数可运行时候修改
[root@redis-25 ~]# redis-cli
#获取配置文件中requirepass值
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) ""
#设置配置文件中requirepass值
127.0.0.1:6379> CONFIG SET requirepass 321
OK
#测试requirepass生效,需要验证
127.0.0.1:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH 321
OK
#内存中的值写入配置文件
# Generated by CONFIG REWRITE
requirepass "321"
#查看配置文件requirepass以改变
[root@redis-25 ~]# vim /etc/redis.conf
# Generated by CONFIG REWRITE
requirepass "321"
三、redis的集群技术:
- 集群技术有客户端分片和代理分片
- 豌豆荚使用的是codis解决方案
-
twitter使用的是twemproxy解决方案
twemproxy
redis cluster解决方案示例
192.168.1.23节点1,主节点端口6379,从节点端口6380
192.168.1.24节点2,主节点端口6379,从节点端口6380
192.168.1.25节点3,主节点端口6379,从节点端口6380
节点3配置
#同步时间
#安装启动redis
[root@redis-25 ~]# vim /etc/redis.conf
bind 0.0.0.0
port 6379
## REDIS CLUSTER ##
cluster-enabled yes #是否启用集群
cluster-config-file nodes-6379.conf #集群自己使用的配置文件,编译安装需创建,rpm安装的它的目录在etc下
cluster-node-timeout 15000 #判断节点故障时长
#其他冗余配置使用默认即可
cluster-slave-validity-factor 10 #如果从节点超过阈值,不可以提升为主节点
#把配置文件拷贝到其他节点
[root@redis-25 ~]# scp /etc/redis.conf 192.168.1.23:/etc/redis.conf
[root@redis-25 ~]# scp /etc/redis.conf 192.168.1.24:/etc/redis.conf
#本机设置从节点
[root@redis-25 ~]# cp /etc/redis.conf /etc/redis-6380.conf
[root@redis-25 ~]# vim /etc/redis-6380.conf
bind 0.0.0.0
port 6380
## REDIS CLUSTER ##
cluster-enabled yes #是否启用集群
cluster-config-file nodes-6380.conf #集群自己使用的配置文件,编译安装需创建,rpm安装的它的目录在etc下
cluster-node-timeout 15000 #判断节点故障时长
#其他冗余配置使用默认即可
cluster-slave-validity-factor 10 #如果从节点超过阈值,不可以提升为主节点
port 6380
[root@redis-25 ~]# ./redis-server -c /etc/redis-6380.conf
其他两个节点1和节点2配置相同
#查询当前集群状态
[root@redis-23 ~]# systemctl start redis
[root@redis-23 ~]# redis-cli
127.0.0.1:6379> CLUSTER INFO
cluster_state:fail #集群信息失败
cluster_slots_assigned:0 #还没有分配slots
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
#第一个节点添加分配slots,范围0-5461
[root@redis-23 ~]# for i in {0..5461}; do redis-cli CLUSTER ADDSLOTS $i; done
#第二个节点添加分配slots,范围5462-10922
[root@redis-24 ~]# for i in {5462..10922}; do redis-cli CLUSTER ADDSLOTS $i; done
#第三个节点添加分配slots,范围10923-16384
[root@redis-25 ~]# for i in {10923..16384}; do redis-cli CLUSTER ADDSLOTS $i; done
#节点添加到集群
[root@redis-23 ~]# redis-cli
127.0.0.1:6379> CLUSTER MEET 192.168.1.24 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.1.25 6379
OK
127.0.0.1:6379> CLUSTER INFO
cluster_state:ok #集群成功
cluster_slots_assigned:16384 #slots数量为16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3 #集群节点3个
cluster_size:3
cluster_current_epoch:2
cluster_my_epoch:1
cluster_stats_messages_sent:49
cluster_stats_messages_received:49
集群节点状态
127.0.0.1:6379> CLUSTER NODES
e1dc2949f385a6e3da6c4c4fdb9b4237a71fb4f0 192.168.1.25:6379 master - 0 1541604377719 0 connected 10923-16383
110f444c4edd6da4ddc6f5c6bf8ff4d0c9244047 192.168.1.23:6379 myself,master - 0 0 1 connected 0-5461
6238596f3e9177db088eae2ddbf9753458b5735c 192.168.1.24:6379 master - 0 1541604376709 2 connected 5462-10922
测试
#循环创建一百个键值
[root@redis-24 ~]# for i in {1..100}; do redis-cli SET key$i value$i;done
[root@redis-24 ~]# redis-cli
127.0.0.1:6379> GET key1
"value1"
网友评论