Redis数据库相关

缓存中间件-Memcache和Redis的区别

Memcache:代码层次类似Hash

  • 支持简单数据类型
  • 不支持数据持久化存储
  • 不支持主从(主从服务器复制)
  • 不支持分片

Redis:

  • 数据类型丰富
  • 支持数据磁盘持久化存储
  • 支持主从
  • 支持分片

Redis数据类型

  • string:最基本的数据类型,二进制安全
  • hash:String元素组成的字典,适合用于存储对象
  • list:列表,按照String元素插入顺序排序
  • set:无序集合,通过哈希表实现,不允许重复
  • zset :有序集合

Redis为何这么快

  • 完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高
  • 数据结构简单,对数据操作也简单
  • 采用单线程,单线程也能处理高并发请求,想要多核也可启动多Redis实例
  • 使用多路I/O复用模型,非阻塞IO

从海量Key里查询出某一固定前缀的Key

  • 方法一:
    使用KEYS pattern命令:查找所有符合给定模式pattern的key
    例如查找前缀为he的key:keys he*
    特点:

    • KEYS指令一次性返回所有匹配的key,速度很慢
    • 键的数量过大会使服务卡顿(影响线上项目运行速度)
  • 方法二:
    使用scan cursor [MATCH pattern] [COUNT count] 命令
    例如查找前缀为he的key:scan 0 [MATCH he*] [COUNT 4]
    表示的是返回前4个he*前缀的key
    特点:

    • 基于游标的迭代器,以0作为游标起点
    • 不保证每次执行都返回给定数量的元素,支持模糊查询

因此采用scan命令进行海量数据查询,查询快速,不会造成服务卡顿。

如何通过Redis实现分布式锁

分布式锁需要解决的问题:

  • 互斥性
  • 安全性
  • 死锁
  • 容错

Redis数据持久化

  • RDB(快照)持久化:保存某个时间点的全量数据快照

    • SAVE:阻塞Redis的服务器进程,直到RDB文件被创建完毕
    • BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程
  • AOF(Append-Only-File)持久化:保存写状态

    • 记录下所有变更数据库状态的指令
    • 以append的形式追加保存到AOF文件中(增量)
  • RDB和AOF的优缺点

    • RDB优点:全量数据快照,文件小,恢复快。
    • RDB缺点:无法保存最近一次快照之后的数据
    • AOF优点:可读性高,适合保存增量数据,数据不易丢失
    • AOF缺点:文件体积大,恢复时间长
  • RDB-AOF混合持久化方式:

    • BGSAVE做镜像全量持久化,再使用AOF重放快照之后的操作指令来做增量持久化。

Redis数据的恢复

在RDB和AOF文件共存情况下的恢复流程:

  1. 先查看AOF文件是否存在,如果存在就加载AOF文件进行恢复
  2. 如果AOF文件不存在,则查看RDB文件是否存在,存在则加载RDB文件进行回复

Redis集群

一致性哈希算法

猜你喜欢

转载自blog.csdn.net/tubro2017/article/details/88080982
今日推荐