非关系型数据库,基于K/V存储,存储于内存的数据库. 每个数据项都由KEY和VALUE组成。V能够是字符串,列表,关联数组(hashs),集合,有序集合。使用key来引用这些值。 redis是单进程的。多核cpu对redis无用。但能够运行多实例。 支持持久化存储。 支持主从复制。 主 rw 从 read-only
1:交互式接口的命令
2:主从如何实现
3:高可用如何实现sentnal(专用于实现redis高可用)node
此节命令重要的有五个:string list hash set sorted_setredis
redis包在epl仓库中。直接使用yum安装便可算法
监听端口:6379/tcp数据库
在未给redis配置帐号密码时。仅支持本地链接
redis-cli :便可链接至redisvim
redis-cli -h 172.16........ –p 端口 -a 密码数组
redis 默认有16个数据库,使用数字标识。
select:切换数据库安全
help 查看 帮助命令的具体使用服务器
help @string能够获取string的全部命令帮助使用信息
设定:SET key value [EX seconds] [PX milliseconds] [NX|XX]网络
[EX seconds] 过时时间。数据是存于内存中的 NX 只有不存在时,才去建立这个值
获取:GET key
追加:APPEND key value
自增:DECR keyapp
DECRBY key increment
自减:INCR key
INCRBY key increment
多设定:MSET
多获取: MGET
获取字段长度:STRLEN key
eg:
设定 获取 追加的使用
数值: 设定 自增 自减 自增多少 自减多少
设定: LSET key index value
依据索引去设定值
左增:LPUSH key value [value ...]
右增:PUSH key value [value ...]
右减:RPOP key
左减:LPOP key
左侧第几个位置删除数值:LREM key count value 此种用的很少
插入:LINSERT key BEFORE|AFTER pivot value
查看:LINDEX key index
设定:HSET key field value
HMSET key field value [field value ...] 一次 给一个key 设定多个值
查看信息HKEYS key
查看值 HVALS key
删除信息:HDEL key field [field ...]
定义集合:SADD key member [member ...]
交集:SINTER key [key ...]
并集:两个集合的并集 SUNION key [key ...]
差集:SDIFF key [key ...]
前面的key有 然后面的key没有的
删除集合中的成员:SREM key member [member ...]
随机弹出集合中的一个元素:SPOP key [count]
查看:SMEMBERS key
交集后存入另外一个集合;SINTERSTORE destination key [key ...]
并集后存入另外一个集合SUNIONSTORE destination key [key ...]
与无序集合 相比 。多了元素的下标
添加: ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
集合内元素的个数:ZCARD key
指定范围内元素的个数:ZCOUNT key min max
获取元素的下标:ZSCORE key member
获取元素的索引:ZRANK key member
列出集合内的元素:ZRANGE key start stop [WITHSCORES]
当向集合内添加元素时,内部默认会给每一个元素增长一个内部的index
订阅:PSUBSCRIBE pattern [pattern ...]
订阅子频道
发布信息:PUBLISH channel message
获取状态:PUBSUB subcommand [argument [argument ...]]
取消订阅:PUNSUBSCRIBE [pattern [pattern ...]]
订阅:SUBSCRIBE channel [channel ...]
启动一个事务:MULTI –
运维不多用到此功能
127.0.0.1:6379> help @connection
AUTH password
summary: Authenticate to the server
since: 1.0.0
ECHO message
summary: Echo the given string
since: 1.0.0
PING [message]
summary: Ping the server
since: 1.0.0
QUIT -
summary: Close the connection
since: 1.0.0
SELECT index 切换数据库
summary: Change the selected database for the current connection
since: 1.0.0
1)编辑配置文件:
#vim /etc/redis.conf
加入:requirepass mashuai
2)重启redis服务
3)链接 redis-cli
不输入密码登陆时 是不能够 输入命令的
4)认证
help @server 查看server端的命令
info: server
client replication 从节点的相关信息
info client
info cpu
info memory
2)flushdb
清空某个数据库
3) CLIENT LIST
列出当前登陆的客户端
核心配置:Limits相关的配置:
网络配置项 NETWORK 持久化相关配置 SNAPSHOTTING
配置和使用Redis: 基本配置项 GENERAL 网络配置项 持久化相关配置 SNAPSHOTTING 另一个持久化的配置 APPEND ONLY MODE 主从复制相关的配置 REPLICATION 安全相关配置 Limit相关的配置 SlowLog相关的配置 INCLUDES Advanced配置
[root@h~]#grep -i "^##" /etc/redis.conf
通用配置项:GENERAL
daemonize, supervised, loglevel, pidfile, logfile, databases:设定数据库数量,默认为16个,每一个数据库的名字均为整数,从0开始编号,默认操做的数据库为0; 切换数据库的方法: SELECT <dbid>
网络配置项:
bind IP port PORT protected-mode tcp-backlog unixsocket timeout:链接的空闲超时时长;
bind: 监听在本机哪一个网卡的ip网络地址上
bind 172.16.253.96
安全配置:
requirepass <PASSWORD>
Limits相关的配置:
maxclients maxmemory <bytes> maxmemory-policy noeviction 淘汰策略:volatile-lru,设置lru时间的键 volatile-ttl,离淘汰时间最近的键淘汰 allkeys-lru, volatile-random, allkeys-random, noeviction maxmemory-samples 5 淘汰算法运行时的采样样本数;
SlowLog相关的配置:
slowlog-log-slower-than 10000 单位是微秒; slowlog-max-len 128 SlowLog记录的日志最大条目
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 client-output-buffer-limit pubsub 32mb 8mb 60 <hard-limit> <soft-limit> 超出 64m后 在60秒内清除 <soft-limit seconds>
redis的配置参数 容许 运行时修改
能够不用更改配置文件 CONFIG GET CONFIG RESETSTAT 重置各类状态 CONFIG REWRITE :利用内存中的设定 重写至 配置文件 CONFIG SET
redis是基于内存的存储
redis的全部数据都是在内存中运行
重启服务后,内存中的全部数据将没有。
持久化:将数据保存在磁盘上,但不是基于磁盘提供服务
两种实现方式:
按事先定制的策略,周期性地将数据从内存同步至磁盘;数据文件默认为dump.rdb;
/var/lib/redis/dumo.rdb
客户端显式使用SAVE或BGSAVE命令来手动启动快照保存机制;
SAVE:同步,即在主线程中保存快照,此时会阻塞全部客户端请求; BGSAVE:异步;后台同步,主程序能够继续向客户端提供请求
RDB相关的配置:
*save <seconds> <changes> save 900 1 save 300 10 save 60 10000 表示:三个策略知足其中任意一个均会触发SNAPSHOTTING操做;900s内至少有一个key有变化,300s内至少有10个key有变化,60s内至少有1W个key发生变化;
stop-writes-on-bgsave-error yes
dump操做出现错误时(不能向磁盘中同步数据时),是否禁止新的写入操做请求;
rdbcompression yes 是否支持压缩,当cpu有较大空闲时,能够启动此选项
rdbchecksum yes 每次同步完以后,是否对RDB文件作检查
dbfilename dump.rdb:指定rdb文件名
*dir /var/lib/redis:rdb文件的存储路径。生产中建议将此文件存储于其余固态硬盘上。
记录每次写操做至指定的文件尾部实现的持久化;当redis重启时,可经过从新执行文件中的命令在内存中重建出数据库;
BGREWRITEAOF:AOF文件重写;
执行此命令,实现AOF文件重写(合并多条命令至一条命令,这就叫作AOF文件重写) 不会读取正在使用AOF文件,而是经过将内存中的数据以命令的方式保存至临时文件中,完成以后替换原来的AOF文件;
启用AOF:
1) 配置文件 appendonly yes 2)命令行 CONFIG SET appendonly yes 此项启用后会生成 /var/lib/redis/appendonly.aof文件
appendfsync: 内存中的数据发生改变,什么时候向磁盘中同步数据
Redis supports three different modes: no:redis不执行主动同步操做,而是内核决定什么时候执行; everysec:每秒一次;当redis出现故障时,有可能会丢失部分数据 always:每语句一次;此种模式,会对系统I/O形成极大的压力 可是,保证了数据的安全性
默认使用everysec模式
no-appendfsync-on-rewrite no
是否在后台执行aof重写期间不调用fsync,默认为no,表示调用; 保证数据的安全性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 重写知足的条件,方会启动重写,重写是为了恢复数据更高效
上述两个条件同时知足时,方会触发重写AOF;与上次aof文件大小相比,其增加量超过100%,且大小很多于64MB;
aof-load-truncated yes redis崩溃时,从新恢复redis后,从磁盘中aof文件从新构建数据至内存后,要不要把aof文件删除。
建议不要同时启用RDB及AOF
RDB与AOF同时启用:
(1) BGSAVE和BGREWRITEAOF不会同时进行; (2) Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF;
特色: 一个Master能够有多个slave主机,支持链式复制; Master以非阻塞方式同步数据至slave主机; 配置slave节点: redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT> 与主节点相连 redis-cli> CONFIG SET masterauth <PASSWORD> 写入与主节点相连的密码
其余配置参数:
配置参数:
*slaveof *masterauth slave-serve-stale-data yes 主节点出问题时,是否使用本机数据提供服务 slave-read-only yes 从节点是 只读的 *repl-diskless-sync no 快照先存于磁盘,再发送给从节点 no, Disk-backed, Diskless 新的从节点或某较长时间未能与主节点进行同步的从节点从新与主节点通讯,须要作“full synchronization",
此时其同步方式有两种style:
Disk-backend:主节点新建立快照文件于磁盘中,然后将其发送给从节点; Diskless:主节占新建立快照后直接经过网络套接字文件发送给从节点;为了实现并行复制,一般须要
在复制启动前延迟一个时间段;
repl-diskless-sync-delay 5 repl-ping-slave-period 10 *repl-timeout 60 repl-disable-tcp-nodelay no repl-backlog-size 1mb
*slave-priority 100
复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举; min-slaves-to-write 3:主节点仅容许其可以通讯的从节点数量大于等于此处的值时接受写操做; min-slaves-max-lag 10:从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操做;
环境: 96 主节点 97 98 从节点
配置文件: bind 0.0.0.0
requirepass mashuai
使用命令 与 主节点实现相连
1)链接至本机 redis
redis-cli
2)
[root@h~]#redis-cli
127.0.0.1:6379> SLAVEOF 172.16.253.96 6379
OK
127.0.0.1:6379> CONFIG SET masterauth mashuai
OK
127.0.0.1:6379> CONFIG REWRITE
OK
3)测试
get name
"tom lucylili"
1)
更改配置文件:实现
vim /etc/redis.conf
slaveof 172.16.253.96
masterauth mashuai
2) 重启redis 服务 测试
查看链接的从节点
info replication
主要完成三个功能:监控、通知、自动故障转移 选举:流言协议、投票协议
port 26379 sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel auth-pass <master-name> <password> <quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时断定主节点故障时,才认为其真的故障。 quorum的数值依据redis集群中的节点数来决定; s_down: subjectively down o_down: objectively down sentinel down-after-milliseconds <master-name> <milliseconds> 监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”; sentinel parallel-syncs <master-name> <numslaves> 指在failover过程当中,可以被sentinel并行配置的从节点的数量; sentinel failover-timeout <master-name> <milliseconds> sentinel必须在此指定的时长内完成故障转移操做,不然,将视为故障转移操做失败;故障转移超时时间 sentinel notification-script <master-name> <script-path> 通知脚本,此脚本被自动传递多个参数;
链接至sentinel端口,查看相关信息
redis-cli -h SENTINEL_HOST -p SENTINEL_PORT redis-cli> SENTINEL masters 监听的主节点 SENTINEL slaves <MASTER_NAME> 从节点信息 SENTINEL failover <MASTER_NAME> 手动down掉主节点 SENTINEL get-master-addr-by-name <MASTER_NAME>
主节点故障时,服务切换至从节点
95 96 97 主机配置文件更改以下 : /etc/redis-sentinel.conf
bind 0.0.0.0
sentinel monitor mymaster 172.16.253.96 6379 2
监测的主节点
sentinel auth-pass mymaster mashuai
主节点远程链接的密码
sentinel down-after-milliseconds mymaster 5000
主节点多长时间链接不上时标记位DOWN
sentinel failover-timeout mymaster 18000
故障转移超时时间,默认为3分钟,此处改成18秒
systemctl start redis-sentinel
查看日志:
redis-cli -h 172.16.253.96 -p 26379
sentinel masters 主节点信息
sentinel slave mymaster 从节点信息
主动down掉 主节点
sentinel failover mymaster
以后 会自动提高一个从节点 为主节点