[redis] redis相关知识零散笔记
1. redis 特点
高性能的No-SQL数据库,这意味着具有ACID(一致性、原子性、持久性、隔离性);
支持数据持久化,支持在不同节点间进行数据备份(以主从模式进行);
提供string、list、hash、set、zset等数据结构,并提供相对复杂的元素操作机制;
支持订阅/发布等新特性;
补充:redis是单线程模型,这是因为在缓存操作中,IO瓶颈远远大于CPU瓶颈。在大型服务中可以使用redis集群来进一步提高处理速度。
2. redis的五种数据结构
另外的笔记已有,此处不再赘述。
3. 发布订阅消息
使得redis作为一个消息服务器,进行消息推送。
频道(Channel),由任意客户端创建,可被多个客户端订阅。
有新消息通过PUBLISH命令推送至频道时,会被随机转发给订阅它的客户端。
缺点在于:不会保存消息历史
4. Redis Stream
Redis 5.0 新增的数据结构,主要用于实现消息队列。
相比发布订阅功能,器作用是可以将数据持久化和主备复制,避免当网络断开或服务器宕机等情况下造成的消息丢失。
redis stream结构看起来类似于一个链表,每个节点(消息)有唯一的ID和对应的内容。
5. HyperLog
redis用于进行技术统计的算法和专门维护的数据结构。基数可以看作是数据集中不重复元素的数量,hyperlog可以快速估计基数。
6. redis 事务
简单使用redis时是一次发送一个命令,但redis还提供了事务功能,可以发送一批操作(作为一个事务),将一整个事务进行执行。
一般顺序为:MULTI创建事务,输入多个命令(命令进入队列缓存),EXEC执行事务。
特点:
若事务中的某个命令执行失败,其余命令会被继续执行;
在一个事务执行时,不会有其他客户提交的命令插入到事务中,也就是说事务的操作有整体原子性。
7. redis 连接
redis采用非阻塞多路服用模型,对于socket会设置TCP_NODELAY,也就是说即使没有收到前一消息的ACK,也会继续发送效益消息,避免浪费网络性能。
redis服务器有最大连接数,可自行设置,默认值为10000。
8. 管道技术
通常情况下,客户端发送命令后需要阻塞等待redis服务器响应。
使用管道技术可以持续向服务端发送请求并一次性得到所有服务器响应。
9. redis分区
目的是将数据分割到多个redis服务器实例,以重复扩展服务器性能。
不足在于:
分区后无法支持不同分区的多个key同时操作。
无法使用涉及多个key的redis事务。
数据处理变得更加复杂。
数据平衡能力(增加删除节点等)变得更加复杂(因为需要对新节点或删除的旧节点进行维护)。
分区方式:
a. 范围分区,按键值范围分区,例如0-100分到r1,101-200到r2
b. hash分区,当键值不是连续的数值时,可以将键值取哈希值并取模到某个范围,随后按照范围分区的方式划分。