共计 1667 个字符,预计需要花费 5 分钟才能阅读完成。
redis(Remote Dictionary Server)是一种开源的、反对网络、基于内存、可长久化的 key-value 数据库
劣势特点
1. 性能高,每秒十万左右读写速度
2. 丰盛的数据类型,key-value 的 value 能够是 String、List、Hash、Set、sorted set
3. 原子性,所有单操作都是原子性的
4. 丰盛的个性,公布 / 订阅、告诉、key 过期等等
数据类型
这里说的数据类型都是指,key-value 中 value 的数据类型,redis 就是一个 key-value 数据库。它的劣势在于 value 是多样的
1.String:最根本的,二进制平安,最大 512MB
2.Hash:如果把 redis 设想成一个值能够是不同数据类型 map。那么 Hash 就像是 map 中嵌一个 map
3.List:有序汇合
4.Set:无序不反复汇合
5.sorted set:有序不反复汇合。它的程序是通过给每个元素关联一个 double 类型的分数值实现的,值是惟一,分数能够反复
数据库
redis 是一个字典构造的存储服务器,一个 redis 实例提供多个用于存储的字典,客户端能够指定操作那个字典。这与关系型数据库实例中有多个数据库相似。
能够通过批改配置文件中的 database 选项,设置 redis 数据库数量。默认 16 个,以 0 开始递增数字 命名。默认应用 0 号
redis 数据库与关系型数据库有很大区别。1. 不反对自定义数据库名称。2. 不反对为每个数据库设置不同明码。3. 最重要的一个实例的多个数据库之间不是齐全隔离的,比方 flushall 命令能够清空 redis 实例中所有数据库中的数据。所以,其实这些数据库更像是一种命名空间,不适宜存储不同应用程序的数据
公布 / 订阅
redis 一个很好的中央就是,它把性能都设计的很容易应用,比方订阅公布:
1. 客户端应用 subscribe channel[channel]命令订阅某几个频道,客户端进入阻断状态
2. 某个客户端应用 publish channel message 公布信息,所有订阅了这个频道的客户端都会收到此信息
事务
1.multi 开始事务
2. 编写命令退出事务队列中
3.exec 命令触发事务
redis 的事务执行并不是原子性的,它能够了解为一个打包的执行脚本,两头某条指令的失败不会导致后面已执行指令的回滚,也不会造成后续指令不做
管道技术
redis 是一种申请 / 响应模式的 tcp 服务,意思就是说,redis 客户端向服务端发送一个申请,并监听 socket 返回。通常是以阻塞模式,期待服务器响应。
redis 管道技术就是,在服务端未响应时,客户端能够持续向服务端发送申请,并一次性获取所有申请的响应。管道技术能大大提高 redis 服务性能
当短时间内产生大量申请,比方我的项目启动之初须要将大量初始化数据放入到 redis 中,能够思考应用管道技术
set 命令的几个参数
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
EX seconds:将键的过期工夫设置为 seconds 秒。执行 SET key value EX seconds 的成果等同于执行 SETEX key seconds value。
PX milliseconds:将键的过期工夫设置为 milliseconds 毫秒。执行 SET key value PX milliseconds 的成果等同于执行 PSETEX key milliseconds value。
NX:只在键不存在时,才对键进行设置操作。执行 SET key value NX 的成果等同于执行 SETNX key value
XX:只在键曾经存在时,才对键进行设置操作。
在 Redis 2.6.12 版本以前,SET 命令总是返回 OK。从 Redis 2.6.12 版本开始,SET 命令只在设置操作胜利实现时才返回 OK;如果命令应用了 NX 或者 XX 选项,然而因为条件没达到而造成设置操作未执行,那么命令将返回空批量回复(nil)
罕用业务场景
1. 缓存,跟其余缓存比,很大的一个劣势,反对多种数据类型
2. 计数器,例如点赞数、珍藏、分享数等等
等等这里不写