Redis_数据类型及命令详细介绍

数据库结构

  • redis是key-value的数据结构,每条数据都是⼀个键值对
  • 键的类型是字符串
  • 注意:键不能重复

数据类型分5种:string,hash,list,set,zset

字符串(String)

字符串类型是Redis中最为基础的数据存储类型,该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

	1. set key value 			// 设置键值
	2. get key           		// value
	3. setex key seconds value  // 设置键值及过期时间
	4. mset key1 value1 key2 value2 ... // 设置多个键值
	5. mget key1 key2...
	6. append key vvv    		// 向key中追加值

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

  • 利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用。
  • 使用APPEND命令在字符串后添加内容。
  • 将字符串作为GETRANGE 和 SETRANGE的随机访问向量。
  • 在小空间里编码大量数据,或者使用 GETBIT 和 SETBIT创建一个Redis支持的Bloom过滤器。

通用命令

	1. del k1 k2    	// 删除键及对应的值
	2. keys *       	// 查看所有key  /keys k* (正则)
	3. expire k1 100    // 设置过期时间
	4. ttl k1       	// 查看有效时间.键不存在为-2,键永久时间为-1
	5. exists k1 		// 存在为1,不存在为0
	6. type k1  		// 查看value的类型

哈希(hash)

Hashes是字符串字段和字符串值之间的映射,所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。

  1. hash⽤于存储对象,对象的结构为属性、值(key field value)
  2. 值的类型为string
	1. hset key field value	 
	2. hmset key field value field2 value2 ...
	3. hget key field
	4. hmget key field field2 ...
	5. hkeys  key  				// 获取key 所有field
	6. hvals  key				// 获取key 所有value
	7. hdel key field field2 ...// 删除key下的field及其对应的value
	8. del key					// 删除键下所有的field及其对应的value
	9. hlen key  				// 获取键值对的个数

列表(list)

列表是简单的字符串列表,按照插入顺序排序。 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。(头 l1 l2 … 尾)
LPUSH 命令插入一个新元素到列表头部,而RPUSH命令 插入一个新元素到列表的尾部。当对一个空key执行其中某个命令时,将会创建一个新表。

  1. 列表的元素类型为string
  2. 按照插⼊顺序排序
lpush key v1 v2 ...			// 将新元素插在头部(头 ... v2 v1 尾)
rpush key l1 l2 ... 		// 将新元素插在尾部(头 ... v2 v1 l1 l2 ... 尾) 
lpop key					// 将第一个元素删除并抛出
linsert key before/after l1 a1	// 将新元素插在l1之前/之后
lset key index value		// 更新index对应的值
lrange key start stop 		// 	遍历list中的元素(从0开始,左右都包),stop为-1遍历所有元素
lindex key index			// 查看index对应的值
lrem key count value  		// 从左往右删除一个或多个为value的值 (没有rrem)
llen key					// 查看list长度

一个列表最多可以包含232-1个元素(4294967295,每个表超过40亿个元素)。

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

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

  • 在社交网络中建立一个时间线模型,使用LPUSH去添加新的元素到用户时间线中,使用LRANGE去检索一些最近插入的条目。
  • 你可以同时使用LPUSH和LTRIM去创建一个永远不会超过指定元素数目的列表并同时记住最后的N个元素。
  • 列表可以用来当作消息传递的基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库。
  • 你可以使用列表做更多事,这个数据类型支持许多命令,包括像BLPOP这样的阻塞命令。请查看所有可用的列表操作命令获取更多的信息。

集合(Set)

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

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

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

一个集合最多可以包含232-1个元素(4294967295,每个集合超过40亿个元素)。

  1. ⽆序集合
  2. 元素为string类型
  3. 元素具有唯⼀性,不重复
  4. 说明:对于集合没有修改操作
	1. sadd key member member2 ... 	// 添加元素
	2. smembers key 				// 查看所有元素
	3. sismember key member 	    // 查看指定元素是否存在,1:存在,0:不存在
	4. srem key memeber ...			// 删除元素
	5. sinter key key2 ... 			// 返回key和key2中的交集元素
	6. spop key count				// 随机删除并抛出count个元素(count省略时抛出一个元素)
	7. srandmember key count		// 随机抛出count个元素(不删除该元素)

你可以用Redis集合做很多有趣的事,例如你可以:

  • 用集合跟踪一个独特的事。想要知道所有访问某个博客文章的独立IP?只要每次都用SADD来处理一个页面访问。那么你可以肯定重复的IP是不会插入的。
  • Redis集合能很好的表示关系。你可以创建一个tagging系统,然后用集合来代表单个tag。接下来你可以用SADD命令把所有拥有tag的对象的所有ID添加进集合,这样来表示这个特定的tag。如果你想要同时有3个不同tag的所有对象的所有ID,那么你需要使用SINTER.
  • 使用SPOP或者SRANDMEMBER命令随机地获取元素。

有序集合(Sorted Set / Zset)

Redis有序集合和Redis集合类似,是不包含 相同字符串的合集。它们的差别是,每个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。

使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。 因为元素是在插入时就排好序的,所以很快地通过评分(score)或者 位次(position)获得一个范围的元素。 访问有序集合的中间元素同样也是非常快的,因此你可以使用有序集合作为一个没用重复成员的智能列表。 在这个列表中, 你可以轻易地访问任何你需要的东西: 有序的元素,快速的存在性测试,快速访问集合中间元素!

  1. sorted set,有序集合
  2. 元素为string类型
  3. 元素具有唯⼀性,不重复
  4. 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
  5. 说明:没有修改操作
	1. zadd 
	2. zrange
	3. zrangebyscore
	4. zrem
	5. zremrangebyscore
	6. zscore

使用有序集合你可以:

  • 在一个巨型在线游戏中建立一个排行榜,每当有新的记录产生时,使用ZADD 来更新它。你可以用ZRANGE轻松地获取排名靠前的用户, 你也可以提供一个用户名,然后用ZRANK获取他在排行榜中的名次。 同时使用ZRANK和ZRANGE你可以获得与指定用户有相同分数的用户名单。 所有这些操作都非常迅速。
  • 有序集合通常用来索引存储在Redis中的数据。 例如:如果你有很多的hash来表示用户,那么你可以使用一个有序集合,这个集合的年龄字段用来当作评分,用户ID当作值。用ZRANGEBYSCORE可以简单快速地检索到给定年龄段的所有用户。

参考文章:

  1. redis所有命令列表
  2. 数据类型(Data types):Redis支持不同类型值的摘要。
  3. Redis 数据类型介绍
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章