数据库|Redis使用指南

数据库|Redis使用指南

文章图片

数据库|Redis使用指南

文章图片

数据库|Redis使用指南

文章图片


Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库 。

  • 基于内存运行 , 性能高效
  • 支持分布式 , 理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库 , 并提供多种语言的API
  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本
Redis 有六种淘汰策略:Redis 4.0 加入了 LFU(least frequency use)淘汰策略 , 包括 volatile-lfu 和 allkeys-lfu , 通过统计访问频率 , 将访问频率最少 , 即最不经常使用的 KV 淘汰 。

Redis 的持久化策略RDB:快照形式是直接把内存中的数据保存到一个 dump 的文件中 , 定时保存 , 保存策略 。 AOF:把所有的对 Redis 的服务器进行修改的命令都存到一个文件里 , 命令的集合 。 Redis 默认是快照 RDB 的持久化方式 。
当 Redis 需要做持久化时 , Redis 会 fork 一个子进程 , 子进程将数据写到磁盘上一个临时 RDB 文件中 。
使用 AOF 做持久化 , 每一个写命令都通过 write 函数追加到 appendonly.aof 中 , 配置方式如下:
appendfsyncyesappendfsync always #每次有数据修改发生时都会写入AOF文件 。 appendfsync everysec #每秒钟同步一次 , 该策略为AOF的缺省策略 。
AOF 可以做到全程持久化 , 只需要在配置中开启 appendonly yes 。 这样 Redis 每执行一个修改数据的命令 , 都会把它添加到 AOF 文件中 , 当 Redis 重启时 , 将会读取 AOF 文件进行重放 , 恢复到 Redis 关闭前的最后时刻 。
主从复制主从配置结合哨兵模式能解决单点故障问题 , 提高 Redis 可用性 。
从节点仅提供读操作 , 主节点提供写操作 。 对于读多写少的状况 , 可给主节点配置多个从节点 , 从而提高响应效率 。
Redis 2.8 之前使用 sync[runId
[offset
同步命令 , Redis 2.8 之后使用 psync[runId
[offset
命令 。
runId:每个 Redis 节点启动都会生成唯一的 uuid , 每次 Redis 重启后 , runId 都会发生变化 。 offset:主节点和从节点都各自维护自己的主从复制偏移量 offset , 当主节点有写入命令时 , offset=offset+命令的字节长度 。 从节点在收到主节点发送的命令后 , 也会增加自己的 offset , 并把自己的 offset 发送给主节点 。 这样 , 主节点同时保存自己的 offset 和从节点的 offset , 通过对比 offset 来判断主从节点数据是否一致 。 repl_backlog_size:保存在主节点上的一个固定长度的先进先出队列 , 默认大小是 1MB 。
主节点发送数据给从节点过程中 , 主节点还会进行一些写操作 , 这时候的数据存储在复制缓冲区中 。
从节点同步主节点数据完成后 , 主节点将缓冲区的数据继续发送给从节点 , 用于部分复制 。
主节点响应写命令时 , 不但会把命名发送给从节点 , 还会写入复制积压缓冲区 , 用于复制命令丢失的数据补救 。

Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统 。