redis是一个key/value型内存数据库,单线程,操作数据非常快。redis是有认证的,需要提供密码,一共16个库。

配置文件

  1. #默认不开启保护模式,如果开启的话需要设置password。
  2. protected-mode no
  3. #snapshoting,rdb存储方法,可能会丢失最近一次快照之后的数据
  4. save 60 1
  5. dbfilename dump.rdb
  6. #aof,aof存储方式,如果同步设置为每秒一次,则最多丢失2s数据
  7. appendonly yes
  8. appendfilename "appendonly.aof"
  9. 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处理每一种数据结构的性能都不一样,需要为业务选择特定的数据结构。

  1. string
  2. list
  3. set
  4. hash
  5. sortedSet

key的存活时间

  1. -1代表key存在,但没有设置过期时间。
  2. -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从(最简单了)
  2. 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