redis架构设计

redis架构设计

一、 简介

  1. 高性能(目前已知性能最快)
    1. 读速度:110000 次 /s
    2. 写速度:81000 次 /s
  2. key-value(单个value的最大限制是1GB)类型的内存数据库
  3. 数据库在内存中进行操作
  4. 支持数据持久化
    1. 定期异步操作将数据库数据flush到硬盘上
  5. 支持string,list,set,sorted set,hash
  6. 操作都是原子性
  7. 支持事务
    1. 对数据的更改要么全部执行,要么全部不执行
    2. 事务中任意命令执行失败,其余命令依然被执行(Redis 事务不保证原子性,也不支持回滚)
    3. 事务中的多条命令被一次性发送给服务器,服务器在执行命令期间,不会去执行其他客户端的命令请求
  8. 支持数据备份( master - slave 模式的数据备份)
  9. 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写
    1. 适合的场景局限在较小数据量的高性能操作和运算上

二、 可实现的功能

2.1 消息队列服务

用List来做FIFO双向链表(前一个元素和后一个元素),实现一个轻量级的高性能消息队列服务

2.2 tag系统

Set可以做高性能的tag系统

2.3 缓存

高并发情况下,将用户基本信息放到redis中,减少对数据库的访问,直接做法就是建立用户的内存模型

存储用户会话缓存信息

2.4 消息(支持 publish/subscribe 通知)

2.5 排行榜/计数器

**计数器:**Redis在内存中对数字进行递增或递减的操作实现的非常好。

**排行榜:**有序集合(Sorted Set)通过分数来实现

三、淘汰策略

3.1从已经设置过期时间的数据集中

volatile-lru: 挑选最近最少使用的数据淘汰
volatile-ttl: 挑选即将要过期的数据淘汰
volatile-random: 随机挑选数据淘汰

3.2从所有的数据集中

allkeys-lru: 挑选最近最少使用的数据淘汰
allkeys-random:,随机挑选数据淘汰

3.3 no-enviction:禁止淘汰数据


四、过期键的策略

4.1定时删除

缓存过期时间到就删除,创建timer耗CPU

4.2惰性删除

获取的时候检查,不获取一直留在内存,对内存不友好

4.3定期删除

CPU和内存的折中方案

五、数据类型分析

5.1 string

最基本的数据类型。
二进制安全的,可以包含任何数据。
最大能存储 512 MB。

5.2 hash

  • 一个键值对(key - value)集合。
  • 一个 string 类型的 key 和 value 的映射表,
  • 适合用于存储对象
  • 可以对对象某一项属性值进行存储、读取、修改等操作。

5.3 list

  • 是简单的字符串列表(集合)。
  • 按照插入顺序排序。我们可以网列表的左边或者右边添加元素。
  • 元素是可重复的。
  • 适用做消息队列或最新消息排行等功能。

5.4 set

  • 无序
  • 通过哈希表实现,因此添加、删除、查找的复杂度都是 O(1)。
  • 是一个 key 对应着多个字符串类型的 value的集合
  • 集合元素不能重复
  • 可以统计访问网站的所有独立ip。

5.5 Zset

  • 和set 一样
  • 不同的是zset 每个元素都会关联一个 double 类型的分数,通过分数来为集合中的成员进行从小到大的排序。
  • value元素是唯一的,但是分数(score)却可以重复。
  • 可用作排行榜等场景。

六、Redis高可用架构

6.1、持久化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值