Redis 常用数据类型
1.字符串
string
int 分布式锁、规避并发
bitmap (1字节=八位能够使用很小的空间处理很大标记性的数据)
1)SETBIT 设置
2)BITCOUNT 数量
3)BITPOS 1第一次出现
4)BITOP 计算AND 并 、 OR 或 、 NOT异或 、 XOR 非
2.列表
有序(插入顺序)
栈 同向命令
堆 反向命令
数组
阻塞队列 BLPOP key [key ...] timeout (消息队列)
3.Hash
map(key,value)
int类型的可以做CRUD
详情页(点赞、收藏、)
4.set
无序 位置随机 去重
抽奖
5.sorted_set
有序set 从左往右变大 底层使用跳表
多个key 可以进行操作(交集、并集)【爬数据根据权重重新排序】
排名
扩展
Pub/Sub 消费者订阅一个通道(阻塞),生产者往通道里面添加数据,消费者会接收到数据。
Redis是可扩展的:(可以专门为某块业务来扩展Redis类型)
使用Redis解决穿透问题---bloom过滤器
bloom 原理是利用bitmap来实现的 一个值通过n个算法定位到n个位数 bitmap对应的位数为1通过反之不通过。能够很大概率上防止穿透。
Redis保证数据不丢失
RDB:是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是,fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
AOF:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。RDB优点缺点:
优点:1)灵活设置备份频率和周期。
2)性能最大化。需要做的只是 fork 出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行 IO 操作了。
3)恢复更快。相比于 AOF 机制,RDB 的恢复速度更更快,更适合恢复数据,特别是在数据集非常大的情况。
缺点:1)数据丢失。系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。【配合AOF使用】
2)数据集较大时,可能会导致整个服务器停止服务。【夜晚启动RDB备份】AOF优点缺点:
优点:1)AOF 包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。
2)可以带来更高的数据安全性,即数据持久性。Redis 中提供了 3 种同步策略,即每秒同步、每修改(执行一个命令)同步和不同步。【丢数据少】
3)AOF 日志过大,Redis 可以自动启用 rewrite 机制。
缺点:1)AOF 文件通常要大于 RDB 文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
2)AOF 在运行效率上往往会慢于 RDB 。【基于同步策略】
Redis集群化部署
sentinel 哨兵模式
主要解决是主备问题:由于网络不稳定。当主机挂掉之后哨兵模式能够更快的相应把备机转换成主机。
哨兵模式运行机制:哨兵通过与Redis主备机通信,当某台Redis通信失败会认为该Redis宕机。如果master宕机会通知其他备机,并通过修改配置把备机修改成主机。
一般情况sentinel会有三个节点,通过投票的方式来确定Redis节点是否宕机。少数服从多数原则。过半原则。
Redis单节点容量问题
1、按照业务拆分。(权限一套Redis、商品一套Redis等)
2、sharding分片技术。
主要介绍2.
2.1 客户端分片
通过算法把数据分别存储到不同的服务器上。
2.2 服务端分片
数据发送到服务端,服务端通过算法把数据存储到不同的机器上。
2.3 代理分片
数据发送给代理,由代理通过算法把数据存储到不同的机器上。
优缺点:
客户端分片。服务端简单,客户端需要进行数据处理然后进行分片。业务复杂化。可以支持服务端数据计算(sorted_set交并集、事务等)
服务端分片:Redis 3.0的集群支持HA。客户端连接集群中任意节点,增删改查时会通过算法查出数据在哪个节点上,会自动把连接连到该节点。数据分片算法 hash取模 16384个槽位。连接成本会很高。
代理分片:客户端与代理连接,所有的操作发送给代理,由代理确定数据存储到哪个节点上。需要引入代理层。twemproxy、predixy。(predixy很快)
分片算法:
1. hash 取模算法 (扩展性不高)
2. 随机random
3. hash一致性