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.计数器,例如点赞数、珍藏、分享数等等
等等这里不写