/ 水滴石穿 / redis数据类型

redis数据类型

2014-10-11 posted in [mysql]

redis数据类型

字符串(String)

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如:一张jpeg格式的图片或者一个序列化的Ruby对象。

一个字符串类型的值最多能存储512M字节的内容。

可以用Redis字符串做许多有趣的事,如下:

列表(Lists)

Redis列表是简单地字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边).

LPUSH命令插入一个新元素到列表头部,而RPUSH命令插入一个新元素到列表的尾部。当对一个空key执行其中某个命令时,将会创建一个新表。类似的,如果一个操作要清空列表,那么key会从对应的key空间删除。这是个非常便利的语义,因为如果使用一个不存在的key作为参数,所有的列表命令都会像在对一个空表操作一样。

一些列表操作及其结果:

LPUSH mylist a    # now the list is "a"
LPUSH mylist b    # now the list is "b","a"
RPUSH mylist c    # now the list is "b","a","c"

从时间复杂度的角度来看,Redis列表主要的特性是支持时间常数的插入和靠近头尾部元素的删除,即使是需要插入上百万的条目。访问列表两端的元素是非常快得,但是如果试着访问一个非常大的列表的中间元素仍然是十分慢得,因为那是一个时间复杂度为O(N)的操作。

可以用Redis列表做许多有趣的事,例如:

集合(Sets)

Redis集合是一个无序的字符串的合计。可以以O(1)的时间复杂度(无论集合中有多少元素时间复杂度都为常量)完成添加、删除以及测试元素是否存在的操作。

Redis集合有着不允许相同成员存在的优秀特性。向集合中多次添加同一个元素,在集合中最终只会存在一个此元素。实际上着意味着,在添加元素前,不需要事先进行检测此元素是否已存在的操作。

一个Redis列表十分有趣的事是,它们支持一些服务端的命令从现有的集合出发去进行集合运算。所以可以在很短的时间内完成合并、求交,找出不同元素的操作。

可以使用集合做以下事情,例如:

Alt text