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

数据库结构

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

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

字符串(String)

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

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

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

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

通用命令

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

哈希(hash)

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

  1. hash⽤于存储对象,对象的结构为属性、值(key field value)
  2. 值的类型为string
hset key field value	 
hmset key field value field2 value2 ...
hget key field
hmget key field field2 ...
hkeys  key  				// 获取key 所有field
hvals  key				// 获取key 所有value
hdel key field field2 ...// 删除key下的field及其对应的value
del key					// 删除键下所有的field及其对应的value
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. 说明:对于集合没有修改操作
sadd key member member2 ... 	// 添加元素
smembers key 				// 查看所有元素
sismember key member 	    // 查看指定元素是否存在,1:存在,0:不存在
srem key memeber ...			// 删除元素
sinter key key2 ... 			// 返回key和key2中的交集元素
spop key count				// 随机删除并抛出count个元素(count省略时抛出一个元素)
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. 说明:没有修改操作
zadd 
zrange
zrangebyscore
zrem
zremrangebyscore
zscore

使用有序集合你可以:

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

参考文章:

  1. redis所有命令列表
  2. 数据类型(Data types):Redis支持不同类型值的摘要。
  3. Redis 数据类型介绍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值