Redis - 高速缓存 & 键值对内存数据库

// Redis 可以当做使用 LRU 算法的缓存来使用,超过缓存大小最近没有使用的数据将自动删除
Redis 通过在 TCP 端口上进行监听,或者Unix socket(如果启用)的方式来接受客户端的连接。
最适合的场景之一是会话缓存
过期(Expires):Redis允许为每一个key设置不同的过期时间,当它们到期时将自动从服务器上删除。

Redis 发布/订阅(Pub/Sub):redis是一个快速、稳定的发布/订阅的信息系统。可以设定对某一个 key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。// 有点像"观察"
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争
为了保持简单,redis 事务保证了其中的一致性和隔离性;不满足原子性(?)和持久性;
通过定时快照(RDF)和基于语句的追加(AppendOnlyFile,aof,记录插入操作)两种方式,redis可以支持数据持久化——将内存中的数据存储到磁盘上,方便在宕机等突发情况下快速恢复。 配置文件中启用持久化操作
⑴ String
  • string 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个key对应一个value。
  • string 类型是二进制安全的。意思是 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象 。
  • string 类型是 Redis 最基本的数据类型,一个键最大能存储 512MB。
⑵ Hash
  • Redis hash 是一个键值对集合
  • Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
⑶ List
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
⑷ Sets
Redis的Set是 String 类型的无序集合。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。提供了求交集、并集、差集等操作
⑸ sorted sets/zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数(权重参数 score)。redis正是通过分数来为集合中的成员进行从小到大的排序。

虽说 NoSQL 都不支持事务,虽然 Redis 的 Transactions 提供的并不是严格的 ACID 的事务(比如一串用 EXEC 提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个 Transactions 还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间也会有其它客户端命令插进来执行)。Redis 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch,然后再执行 Transactions,在这过程中,如果这个 Watched 的值进行了修改,那么这个 Transactions 会发现并拒绝执行。