Redis

Posted 谭普利特

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis相关的知识,希望对你有一定的参考价值。

目录

Redis

Redis官方站点:https://redis.io/

配置文件参数

配置文件位置:/etc/redis.conf

  • daemonize no 是否以守护进程运行
  • port:默认监听tcp/6379
  • tcp-backlog 511:等待队列
  • bind 127.0.0.1 : 监听地址
  • unixsocket /tmp/redis.sock
  • timeout 0:当客户端连接超时时间0表示不超时
  • database 16 :表示可以使用多少个database
  • save 900 1:如果900秒内有一次数据修改,就做一次快照,持久化
  • save “” : 关闭RDB
  • slaveof <masterip> <masterport> : 指明是谁的从服务器
  • maxclients : 最大客户端并发数
  • maxmemory:指明主机最大允许使用内存量
  • dbfilename dump.rdb:持久化文件名
  • dir /var/lib/redis:指明持久化文件保存目录
  • rdbcompression yes:持久化时是否压缩
  • rdbchecksum yes:持久化时是否校验
  • stop-write-on-bgsave-error yes :持久化过程中如果出现错误,是否停止持久化
  • appendonly on :默认关闭AOF
  • appendfilename “appendonly.aof” : AOF文件名
  • appendfsync always :每次收到写请求都会追加到文件中(io操作频繁)

  • appendfsync everysec:每秒钟往aof文件中写一次(推荐使用)

  • appendfsync no:不通知内核,内核决定什么时候持久化写入

  • no-appendfsync-on-rewrite no:重写的时候对新的写操作不做写入

  • auto-aof-rewrite-percentage 100:表示如果当前的aof文件大小已经是上一次重写时文件大小的2倍时触发一次重写过程

  • auto-aof-rewrite-min-size 64mb:重写时的最小大小,避免刚开始的频繁重写

  • slave-serve-stale-data yes:当主服务器连接不上时是否仍旧响应数据

  • slave-read-only yes:slave只读

  • slave-priority 100:slave的优先级,优先同步

redis开启认证方法

  1. /etc/redis.conf 配置文件中添加:requirepass your_pass
  2. 登录redis之后使用,auth your_pass即可

清空数据库

  • FLUSHDB:清空当前库
  • FLUSHALL:清空所有库

Redis的事务

  • 通过MULTI,EXEC ,WATCH等命令实现事务功能:讲一个或多个命令归并为一个操作提请给服务器按顺序执行的机制
  • MULTI:启动一个事务
  • EXEC:真正执行一个事务,服务器一次性将事务中的所有操作执行完成后返回给客户端
  • WATCH:乐观锁,在EXEC执行之前可以用于监视指定数量的键,如果监视中的某个任意键数据被修改,则服务器拒绝执行事务,如果在exec之前watch中的键没有发生改变,则服务器执行操作

  • Redis不支持回滚操作

Redis连接相关命令

  • ping
  • echo
  • auth:认证
  • select:选择数据库

Redis发布与订阅(publish/subscribe)

  • SUBSCRIBE + 频道名称:订阅一个或多个队列
  • PUBLISH + 频道名称:向频道发布消息
  • UNSUBSCRIBE + 频道名称:退订此前订阅的频道

  • PSUBSCRIBE:模式订阅

Redis持久化

  • RDB模式:snapshot,二进制格式,默认模式,按照事先定制的策略,周期性的将数据保存至磁盘,数据文件默认为dump.rdb,启动一个新线程来保存数据;

    客户端也可以显示使用SAVE和BGSAVE命令启动快照保存机制;SAVE:在主线程中保存快照,但是SAVE命令是在主线程中执行保存数据,会阻塞所有客户端请求;

    BGSAVE:异步,不会阻塞客户端的请求

  • AOF模式:Append Only File,会将收到的每一次写操作记录到文件中类似于,mysql的binlog,Redis能够合并AOF的文件,当redis重启时,可通过重新执行文件中的命令在内存中重建数据库

    BGREWARITEAOF:不会读取正在使用AOF,而通过将内存中的数据以命令的方式保存到临时文件中,完成之后替换原来的AOF文件。

    AOF文件重建过程:redis主进程调用fork生成子进程,子进程根据redis内存中数据现有状态往临时文件中生成重建数据库的命令,父进程将继续接受客户端请求,并且会把这些请求中的写操作继续追加至原来的AOF文件(防止重写失败),额外的,这些新的写请求还会被放置在一个缓冲队列中,子进程重写完成会通知父进程,父进程把缓冲中的命令写到临时文件中,父进程用临时文件替换原来的文件

  • 注意:持久化本身不能取代备份,还应该指定备份策略,对redis数据库定期进行备份

  • RDB与AOF同时启用
    1. BGSAVE和BGREWRITEAOF不会同时执行
    2. 在Redis服务器启动用于回复数据时,会优先使用AOF

Redis的主从复制

  • 特点:一个Master可以有多个Slave,支持链式复制,Master以非阻塞方式同步数据至slave
  • 主从复制工作过程:
    1. 主库基于ping命令检测从服务器是否在线
    2. 从库发送同步请求到主库请求同步数据,主库启动一个子进程,将内存中的数据保存到文件中发送给从库,从库将数据先保存到本地数据文件中,然后再将文件加载到内存中完成同步
  • 主从配置,在从服务器配置文件中配置slaveof <masterip> <masterport>或者直接在命令行接口中redis-cli中配置slaveof <masterip> <masterport>,注意:配置主从服务器的时候,配置文件如果监听了多个IP,需要将将主从服务器同一网段的IP配置在前面
  • 如果master使用requirepass开启了认证功能,从服务器要使用masterauth <password> 来连入主服务器

用sentinel实现redis集群高可用

  • sentinel用于管理多个redis服务器实现高可用

  • 可以监控redis Master运行状况,当主服务器发生故障时,实现自动在从服务器中挑选出一个从服务器作为主服务器

  • 使用流言协议,投票协议

  • 主观下线:一个sentinel实例判断某节点下线

  • 客观下线:多个sentinel实例协商后判断出某节点下线

  • 每秒通过ping命令探测所有节点是否存活

  • 运行sentinel

    1. redis-sentinel /path/to/file.conf

    2. redis-server --sentinel /path/to/file.conf

    3. 服务器自身初始化,运行redis-server中专用于sentinel功能的代码

    4. 初始化sentinel状态,根据指定的配置文件,初始化监控的Master服务器列表

    5. 创建连接master的连接

  • 专用配置文件:/etc/redis-sentinel.conf

  • 主要配置示例:

     # sentinel monitor <master-name> <ip> <redis-port> <quorum> 配置监控的master,从节点通过主节点获取,该选项可以设置多次,可以指定多个集群,指定多个集群 的时候需要指定不同的master-name
     sentinel monitor mymaster 127.0.0.1 6379 2
     # sentinel down-after-milliseconds <master-name> <milliseconds> 判断主节点不在线需要的秒数,默认为30秒,可以根据网络状况适当调整
     sentinel down-after-milliseconds mymaster 30000  
     # sentinel parallel-syncs <master-name> <numslaves> 指定主服务器宕机后,新主服务器允许多少个从服务器向新的嘱咐其发起同步请求,默认为1个
     sentinel parallel-syncs mymaster 1
     # sentinel failover-timeout <master-name> <milliseconds> 故障转移超时时间,当主服务器宕机以后,将从服务器设为主服务器的超时时间,如果设定时间内不能将从 服务器设置为主服务器则失败,默认为3分钟
     sentinel failover-timeout mymaster 180000
  • sentinel专用命令:
    1. sentinel masters:获取所有master节点
    2. sentinel slaves <master name> 获取指定Master的从服务器节点
    3. sentinel get-master-addr-by-name <master name>
    4. sentinel reset:重置所有状态
    5. sentinel failover <master name>:手动执行故障转移操作

Clustering

  • 分布式数据库,通过分片机制进行数据分布,clustering内的每个节点仅有数据库的一部分数据
  • 每个节点持有全局元数据,但仅持有一部分数据

以上是关于Redis的主要内容,如果未能解决你的问题,请参考以下文章

redis存储session配制方法

Redis实现分布式锁(设计模式应用实战)

Redis实现分布式锁(设计模式应用实战)

Redis缓存:java语言注释符号,附超全教程文档

spring boot 整合 redis

Redis 学习 —— 数据类型及操作