Redis 是开源免费的,是一个高性能的key-value数据库。
Redis特点
Redis 与其他 key – value 缓存产品有以下三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
redis优势:性能高、丰富的数据类型、原子性、丰富的特性
redis支持5种数据类型:string字符串、hash哈希、list列表、set集合、zset有序集合
单机redis支持多个数据库,但是多个数据库是隔离的,不能共享,如果是集群,就没有数据库的概念
redis键命令https://redis.io/commands
常用:
是否存在:exists
删除:del
序列化:dump
随机返回key:randomkey
修改key名:rename
redis发布订阅
redis发布订阅(pub/sub)是一种消息通信模式:发送者发送消息,订阅者接收消息
redis客户端可以订阅任意数量的频道
当有新消息通过PUBLISH命令发送给频道时,这个消息就会被发送给订阅这个频道的多个客户端
订阅subscribe,发布publish
redis事务
redis事务一次可以执行多个命令,并且:
批量操作在发送EXEC命令前被放入队列缓存
收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中
一个事务从开始到执行会经历三个阶段:开始事务->命令入列->执行事务
单个redis命令的执行是原子性的,但是redis事务的执行不是原子性的。事务可以理解为一个打包执行的批量执行脚本,但是批量指令的执行不是原子化的操作,所以中间某条指令的失败不会导致前面已经执行指令的回滚,也不会造成后续指令的不执行。
客户端连接
redis通过监听一个tcp端口或者unix socket的方式来接收来自客户端的连接,当一个连接建立后,redis内部会进行以下一些操作:
1.首先,客户端socket会被设置为非阻塞模式,因为redis在网络事件处理上采用的是非阻塞多路复用模型
2.然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法(允许小包发送,性能高、延时少)
3.然后创建一个可读的文件事件用于坚定这个客户端socket的数据发送
redis是一种基于客户端-服务端模型以及请求/相应协议的TCP服务,意味着通常情况下请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并且监听socket返回,通常是以阻塞模式,等待服务端响应
服务端处理命令,并且将结果返回客户端
管道技术
redis的管道技术,在服务端未响应的时候,客户端可以持续向服务端发送请求,并最终一次性读取所有的服务端响应。管道技术最显著的优势是提高了redis的服务性能
redis分区
分区是分割数据到多个redis实例的处理过程,因此每个实例只保存key的一个子集
分区的优势:
利用多台计算机的内存,构造更大的数据库
通过多核和多台计算机,允许扩展计算能力
通过多台计算机和网络适配器,允许扩展网络带宽
分区的不足:
涉及多个key的操作不被支持
设计多个key的redis事务不能使用
使用分区的时候,数据处理比较复杂
增加或者删除容量时也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡能力,但是类似于客户端分区、代理等其他系统,则不支持这项特性
分区类型:范围分区&哈希分区
范围分区的不足,是需要一个区间范围到实例的映射表,这个表要被管理,同时还需要各种对象的映射表
内容来源于runoob.com