redis是一个key/value型内存数据库,单线程,操作数据非常快。redis是有认证的,需要提供密码,一共16个库。
配置文件
#默认不开启保护模式,如果开启的话需要设置password。protected-mode no#snapshoting,rdb存储方法,可能会丢失最近一次快照之后的数据save 60 1dbfilename dump.rdb#aof,aof存储方式,如果同步设置为每秒一次,则最多丢失2s数据appendonly yesappendfilename "appendonly.aof"appendfsync everysec
redis工具
1、redis-server 启动redis
2、redis-cli redis 命令行工具
3、redis-benchmark 基准测试工具
4、redis-check-aof AOF持久化文件检测工具和修复工具
5、redis-check-dump RDB持久化文件检测工具和修复工具
6、redis-sentinel 启动redis-sentinel
发布与订阅
SUBCRIBE,订阅
UNSUBCRIBE,非订阅
排序操作
SORT命令
管道
redis的管道技术(pipeline),将多个命令一次性发送,然后一次性接收请求的响应。
事务
redis事务是一个打包的批量执行脚本。如果其中一个命令执行失败,不会对事务进行回滚。可以跟管道技术进行结合。
MULTI,开启事务
EXEC,执行事务
DISCARD,抛弃事务
持久化
redis的持久化(AOF 和 快照),默认开启快照(snapshoting),不开启aof (appendonly no)。aof是快照保存的一种不存,如果在快照保存间隔内,发送了redis进程被杀死或者断电的情形,可以开启aof来尽可能减少数据丢失。
#15分钟内,至少写了一次,就进行快照保存
save 900 1
#5分钟内,至少写了一次,就进行快照保存
save 300 10
#1s中内,至少进行了1W次写入
save 60 10000
通讯协议
http://redisdoc.com/topic/protocol.html
应用场景
- 分布式锁
- 缓存热点数据
- 最新队列
基础数据结构
redis处理每一种数据结构的性能都不一样,需要为业务选择特定的数据结构。
- string
- list
- set
- hash
- sortedSet
key的存活时间
- -1代表key存在,但没有设置过期时间。
- -2代表key已经过期 或 key不存在。
常见优化
使用批量操作获取和设置key
如mset,mget。
常用命令
key相关
- get key
- set key
- del key
- ttl key
- dbsize
- keys *
- key a?
- flushdb
- flushall
- DBSIZE
- type key
服务器相关
- info
- watch,unwatch
- slowlog
- CLIENTLIST
集群相关
- cluster info
部署
主从复制模式
从redis是只读的,不能进行写入操作。
- 1主1从(最简单了)
- 1主多从 分为单分支 和 多分支的情况。 ```shell 复制流程:
1.从服务器发送一个SYNC命令,表示有一个从服务器连入。 2.主服务器接收到命令后,首先会进行一个bgsave操作,保存当前的快照版本。并使用缓冲区来记录之后执行的所有写命令。 3.在主服务器bgsave操作的这段时间内,从服务器可以根据配置(slave-serve-stale-data)来决定是否接收请求,还是向发送请求的客户端返回错误。 4.主服务器bgsave完之后,会向从服务器发送快照文件。并持续记录这段时间内收到的命令。 5.从服务器拿到快照之后,会丢弃掉之后的所有数据。然后加载主服务器发送过来的快照文件。 6.主服务器开始向从服务器发送缓冲区里面的命令,从服务器接收。 7.缓存区的命令发送完之后,主服务器会每接收到一个命令就发送从服务器。从服务器接收。
从redis配置,如果部署在同一台电脑上那么,需要修改从redis的端口号。
port 6380 slaveof masterip masterport
<a name="QxHNT"></a>
#### 哨兵模式
哨兵的作用就是监听主从redis,发现主redis挂了之后,需要实现redis的主从切换。这时候分为主观下线 和 客观下线。从redis切换完之后,如果之前的主redis重新连接,那么之前的主redis角色已经变成了slave。
```shell
1.1主3从3哨兵
这里哨兵的个数必须大于等于3。因为哨兵选举的机制是确定master不可用的sentinel必须大于等于quornum,而且大多数哨兵之间也必须是可以通信的。2个哨兵quorum为2,3个哨兵quorum为2,5个哨兵quorum为3。
sentinel哨兵模式:
#启动命令
redis-server.exe redis.windows.conf --sentinel
#配置明细
port 16379
sentinel monitor master 127.0.0.1 6379 2
sentinel down-after-milliseconds master 5000
sentinel parallel-syncs master 1
sentinel failover-timeout master 15000
集群模式
哨兵,主从模式下数据都是存多份的,会造成存储空间的浪费。而集群模式则是分布式存储。对于高版本redis(5.0)以上直接用redis-cli工具就可以进行集群搭建。对于低版本redis,集群模式下,需要使用redis-trib.rb工具来搭建集群,不用自己指定主从服务器。
#这里介绍redis高版本的方式,指定集群里里面的节点 和 主从比例。
redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
#注意用redis-cli连接集群的时候,需要指定-c模式。
redis-cli.exe -c
