Redis是一个远程内存数据库,不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数量模型。Redis提供了5中不同类型的数据结构。除此之外,通过复制,持久化和客户端分片等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。
![1、Redis系列——Redis简介](http://p2.ttnews.xyz/loading.gif)
Redis与其他数据库和软件的对比
![1、Redis系列——Redis简介](http://p2.ttnews.xyz/loading.gif)
Redis数据结构
Redis中的字符串:
字符串拥有一些和其他键值存储相似的命令,如GET(获取值),SET(设置值)和DEL(删除值)。除此之外还提供了一些对字符串的其中一部分内容进行读取和写入的命令,以及一些能对字符串存储的数值执行自增或自减操作的命令,这些后续在进行介绍。
字符串命令
示例:
Redis中的列表:
Redis对链表(linked-list)结构的支持使得它在键值存储的世界中的独树一帜。一个列表结构可以有序地存储多个字符串。和表示字符串时使用的方法一样。
Redis列表可以执行的操作和很多编程语言里面的列表操作相似,LPUSH和RPUSH分别用于将元素推入列表的左端(left end)和右端(right end);LPOP和RPOP命令分别用于从列表的左端和右端弹出元素;LINDEX命令用于获取列表在给定位置上的一个元素;LRANGE命令用于获取列表在给定范围上的所有元素。
列表命令
示例:
向列表推入新元素后,命令会放回当前列表的长度
使用0为范围的起始索引,-1为范围的结束索引,可以取出列表包含的所有元素
使用lindex可以从列表里取出单个元素,从列表里面弹出一个元素,被弹出的元素不再存在于列表
Redis的集合:
Redis的集合和列表都可以存储多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过散列表来保证自己存储的每个字符串都是各不相同的。
因为Redis的集合使用无序方式存储元素,所以用户不能像使用列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素,不过用户可以使用SADD命令将元素添加到集合,或者使用SREM命令从集合里面移除元素。另外还可以通过SISMEMBER命令快速地检查一个元素是否已经存在于集合中,或者使用SMEMBERS命令获取集合包含的所有元素(如果元素多那么命令执行速度可能会很慢,慎用)。
集合除了基本的添加操作和移除操作之外,还支持很多其他操作,比如SINTER,SUNION,SDIFF这3个命令就可以分别执行常见的交集计算,并集计算和差集计算。
集合命令
示例:
- 在尝试将一个元素添加到集合的时候,命令返回1表示元素被成功添加到集合,返回0表示已经存在集合中;
- 获取集合包含的所有元素将得到一个由元素组成的序列;
- 检查一个元素是否存在于集合中;
- 在使用命令移除集合中的元素时,命令会返回被移除元素的数量;
Redis的散列:
Redis的散列可以存储多个键值对之间的映射。和字符串 一样,散列存储的值既可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字值执行自增操作或者自减操作。
示例:
- 在尝试添加键值对到散列的时候,命令会返回一个值来表示给定的键是否存在;
- 在删除键值对的时候,命令会返回一个值来表示给定的键在移除之前是否存在;
- 从散列里面获取某个键的值;
Redis的有序集合:
有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;
有序集合的值则被称为分值(score),分值必须为浮点数。
有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。
示例:
- 在尝试向有序集合添加元素的时候,命令会返回新添加元素的数量;
- 在获取有序集合包含的所有元素时,多个元素会按照分值大小进行排序;
- 用户也可以根据分值来获取有序集合中的一部分元素;
- 在移除有序集合元素的时候,命令会返回被移除元素的数量;
閱讀更多 hnyztcl 的文章