水滴石穿 / mysql

redis数据类型

2014-10-11 posted in [mysql]

redis数据类型

字符串(String)

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

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

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

  • 利用INCR命令簇(INCR、DECR、INCRBY)来把字符串当做原子计数器使用。
  • 使用APPEND命令在字符串后添加内容。

列表(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列表做许多有趣的事,例如:

  • 可以在社交网络中建立一个时间线模型,使用LPUSH去添加新的元素到用户时间线中,使用LRANGE去检索一些最近插入的条目。
  • 可以使用LPUSH和LTRIM去创建一个永远不会超过指定元素数目的列表并同时记住最后的N个元素。
  • 列表可以用来当做消息传递的基元。

集合(Sets)

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

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

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

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

  • 用集合跟踪一个独特的事情。想知道所有访问某个博客文章的独立IP。只要每次都用SADD来处理一个页面访问。那么可以肯定重复的ip诗不会插入的。

Alt text

Understanding mysql table types or storage engines

2014-09-12 posted in [mysql]

Manage database in mysql

2014-09-11 posted in [mysql]

mysql建索引原则及慢查询分析步骤

2014-09-10 posted in [mysql]

MySQL Primary Key

2014-08-01 posted in [mysql]

Top 20 mysql best practices!

2012-03-04 posted in [mysql]