Redis探索之旅(10)- Redis数据结构之有序集合
在前面的博客文章中,已经简单的讲述了Redis的常用数据类型数据结构,今天我们来对最后一个进行简单说明,因为自身用的不多,因此这里简单说明一下。
有序集合,顾名思义,就是集合时有序的,默认情况下,怎么才能保证有序呢?集合怎么知道哪个元素在前,哪个元素在后呢?当然这个判定标准需要我们告诉Redis集合。怎么去告诉Redis呢?很简单,我们在日常开发过程中,其实对于两个元素的排序,无非是根据这两个元素的一些特性(属性)的值的大小进行比较,小的在前,大的在后。这里的有序集合也是采用同样的处理办法,就是给保存到集合中的每个元素赋予一个值,根据这个值的大小比较来决定元素在集合中的顺序。
首先我们来看看怎么往有序集合中添加元素,添加元素分为一次添加一个,或者一次添加多个,写法如下所示:
从截图中我们通过两种方式向sortedset有序集合中插入了若干元素,并且通过zange方法查看了相应的元素。(zrange后面带的数字其实是元素的顺序标识,因为有序集合时有序的,默认情况下按照从小到大进行排序,那么元素的顺序应该是orange -> apple -> pear -> banana, 这时候如果对元素按照顺序标识,那么第一个元素是0, 第二个元素是1,依次类推...所以zrange sortedset 2 4 返回的就是pear和banana了,这里只要记住zrange是以元素位置下表作为查询参数就可以啦^_^,如果想按照从大到小的顺序查看,那么就要使用zrevrange了...)
如果想知道有序集合中有多少元素?可以使用“zcard key名”。如果你不是简简单单想知道整个集合的元素数,而是想知道位于某个区间范围的元素个数,那么需要借助另一个指令zcount,使用方法:zcount key名 min值 max值
可见,值位于2~4之间(闭包)的有三个元素,他们分别为apple、pear和banana。
如果你觉得数据有问题,也可以查看你怀疑的那个元素的情况,使用zscore来查看某个元素对应的值,如下所示:
如果你觉得这个值有问题,那么你可以通过下面的方式修改元素的值,或者通过zadd重新设置元素的值。
这里,我们通过zincrby命令给orange这个元素的值增加了5,从返回结果中可以看出,该元素对应的值已经变为6了。
按照上面更新之后,按理说元素的位置应该发生了变化,orange权值最大,应该在最后,apple最小,应该在最前,为了验证,我们通过zrank和zrange来分别看看:
从返回结果看,顺序的确发生了变化,orange变成了最后,且orange的位置索引为3。(-1表示右边倒数第一个元素)
除了上面的所有操作以外,紧接着的集合内操作可能就是删除了,这时候就要用ZREM及相关的其他一些根据排名、分数或者字典来进行删除的命令了。
而其他的三个类似的删除命令在名称上很相近,都是ZREMRANGEBY***,只不过删除的策略不同,所以名称上有所不同,三个命令分别为ZREMRANGEBYLEX、ZREMRANGEBYRANK和ZREMRANGEBYSCORE。
至此,大多数关于有序集合的命令都简单介绍完了,关于集合间的操作这里就不做介绍了,有需要的请自行查看官网。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。