Redis的5中数据类型以及常见操作

来源:互联网 发布:淘宝新店会有人买吗 编辑:程序博客网 时间:2024/06/05 09:34

关于索引

redis中的索引规则如下:
1、从左边算起,第一个位置为0,第二个为1,以此类推;

2、从右边算起,第一个位置为-1,I第二个为-2,以此类推;

3、上面两种索引规则可以交叉使用

例如(0,3)表示从左边开始第一到第4个元素;(-3,-1)表示从右边开始第一到第四个元素;而(0,-1)表示所有元素 

关于类型

1、key的类型必须是String

2、Redis中的所有类型都不支持嵌套(例如Hash的value只能是一系列String,而不能是List或者Set)

关于随机

set类型支持随机返回集合中的member。这种随机的操作过程如下。

set内部采用咩有value的hash实现。也就是set的成员是hash的key。hash的存储方式是利用一个散列函数hash()计算key的值,之后把key存储在散列表对应的位置。如果出现冲突(多个key计算得到的散列值相等),那么它们组成一个链表。

在这个基础上,set随机返回成员的过程是:1)先随机选取一个散列值;2)如果这个位置上有没有值,则继续随机选择下一个;3)如果有只有一个key,那么返回这个key;4)如果是一个链表,那么随意从链表中选择一个key返回。

因此,没有组成链表的key被选中的可能性更大。

关于开闭区间

指定范围的时候默认是包括指定的值,即闭区间。可以用在值之前加“(”的方式使得不包括制定的值,即变为开区间。

关于排名

默认的排名均是采用升序(从小到大),带有rev(reverse)的命令将排序结果反转,变得到降序的结果。

一、String

String是Redis中最基础的类型。可以理解为简单的“key-value”对,其中key和value都是String类型。

1、set key value 设置“键-值”对

2、get key 获得键值

3、mget key [key ...]获得多个key的值

4、mset key value [key value ...]设置多个key-value

5、incr key 递增数字的值,如果key原来不存在,则建立key,并将key的值自增为。返回自增后的值或者错误信息(值不是数字)

6、incrby key increment 将key的值增加increment,返回增加后的值或者错误信息(值不是数字)

7、decr key与decrby key decrement做incr和incrby相同,只不过为减小操作、

8、incrbyfloat key increment 与incrby的差别就是递增的数字可以是双精度浮点数

9、append key value 向key值尾部追加value,如果key不存在则建立key,并把值设为value,返回追加后的value长度

10、strlen key 获得键值的长度,key不存在则返回0

11、getbit key offset获得offset处的bit值(0或者1),如果offset超出了值得长度默认为0

12、setbit key offset value 将键值offset处的位设置为value(0或者1),如果offset超过了键值长度或者key不存在,那么value所有位都会设为0

13、bitcount key [start] [end]统计start end标记的字节范围内位的值为1的个数

14、bitop operation destkey key [key ...] 对key执行operation代表的位运算,结果存在destkey中。其中operation可选OR、AND、XOR和NOT

二、Hash

Hash类型的结构为“key-hashtable”,其中hashtable中可以包括至多2^32-1个String类型的value.这种结构使得Hash类型很适合于存储对象。key用于标记一个对象,而hashtable中的每一个域对应对象的一个属性值。

1、hset key field value 设置key的field域,值为value

2、hget key field 获得key的field域的值

3、hmset key field value [field value ...]为key设置多个file-value

4、hmget key field [field ...]获得key的多个field的值

5、hgetall key获得key所有的filed-value

6、hexists key field 判断key的field是否存在

7、hsetnx key field value 如果key的field不存在,这设置key的field-value,如果存在不执行任何操作

8、hincrby key field increment key的field的值增加increment

9、hdel key field [field ...]删除key的一个或多个域

10、hkeys key 只获取key的所有域的名字(不获得值)

11、hvals key 只获得key的所有域的值(不获得域的名字)

12、hlen key 获得key的域的数量

三、List

List类型的结构为“key-list”,其中list为双向链表,这就意味着在list两端添加和删除元素的时间复杂度为O(1),并且即使在list很大的情况下,获取前几条和后几条的速度是很快的(与list长度无关)。但list的缺点就是随机访问性能较差。List中最多容纳啊2^32-1个String

1、lpush key value [value ...]/rpush key value [value ...]在key的链表左边/右边添加一个或多个value

2、lpop key/rpop key 从key的链表左边/右边弹出一个元素,并返回值

3、llen key获取key的链表长度

4、lrange key start stop 根据索引获得key的链表索引位于[start,stop]区间内的值,注意stop的值一定要大于start,例如0 4或者-3 -1,两套索引可以交叉使用,例如0 -1(获得所有)

5、lrem key count value 删除key的链表中前count个值为value的元素。返回实际删除的元素个数

6、lindex key index 获得key链表中指定索引位置的值

7、lset key index value 设置key的链表中指定索引的位置的值

8、ltrim key start end 保留key的链表中索引位于[start,end]范围内的链表片段

9、linsert key before|after pivot value 在key的链表中从左到右第一个值为pivot的元素的前面|后面插入值为value的元素

10、rpoplpush source destination 从source的链表的右边pop出第一个元素并从左边插入到destination的链表中

四、Set

Set是集合类型,集合类型与链表类型的区别在于1)集合不允许重复元素,链表可以;2)集合中的元素是无序的,链表中的元素是有序的

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在。在Redis内部,集合类型是用值为空的hash实现的。所以查询操作为O(1)。同时,集合类型支持叫、并、差运算。

1、sadd key member [member...] 向集合中加入key以及一个或多个member。返回成功添加的member的个数。如果member重复,则忽略。

2、srem key member [member...]在key对应的集合中删除member,如果member不存在则忽略。返回成功删除的member个数。

3、smembers key 获得key对应集合的全部元素。

4、sismember key member 判断member是否是key对应集合的成员。

5、sdiff key [key...]计算集合的差集,多于2个的集合将依次做差集。(key1-key2)-key3...

6、sinter key [key...]计算集合的交集,同样支持多个集合运算。

7、sunion key [key...]计算集合的并集,支持多个集合的运算

8、scard key 获得key对应集合的元素个数。

9、sdiffstore destination key [key...]计算集合的差集,并且把结果存入destination对应的集合中。

10、sinterstore destination key[key...]计算集合的交集,并且把结果存入destination对应的集合中。

11、sunionstore desstination key[key...]计算集合的并集,并且把结果存储到destination对应的集合里。

12、srandmember key [count] 不给出count时,从key对应集合中随机返回一个member;当count>0时,从集合总随机返回count个不重复的元素;当count<0时,从集合中返回|count|个元素,但可能存在重复。

13、spop key 从集合中随机返回一个元素

五、Sorted Set

有序集合在集合的基础上为每个元素关联了一个分数。集合中元素的排序就是依据这个分数。要注意分数是由用户指定的,与元素本身没有必然关系。虽然集合中的每个元素都是不同的,但是它们的分数可以相同。因为元素之间有了顺序,所以有序结合支持获得前几个(后几个)元素、获得某一范围内的元素。这似乎与List有些相似。二者的区别主要表现在 1)List采用链表实现,靠近两边的访问速度快,但位于中间的元素的访问速度慢。2)有序结合是采用hash表和Skip list实现的,所以即使读取中间的元素也相对比较快(O(log(n)))。3)List中不能简单的调整某个元素的位置,但有序结合可以通过调整分数实现。4)有序结合比List更耗费内存。

1、zadd key score member [score member...] 向有序集合中添加一个或多个元素及分数,分数可以是整数、双精度浮点数,并且可以用“+inf”和“-inf”表示“正无穷大”和“负无穷大”。

2、ascore key member获得key对应有序集合中member的分数。

3、zrange key start stop [withscores] 按照分数从小到大的顺序返回索引从start到stop的所有元素,包括start和stop。withscoresu选项可以控制是否返回得分。如果两个元素分数相同,Redis会按照字典熟顺序(“0”<“9”<“A”<"Z"<"a"<"z")进行排序。

4、zrevrange key start stop [withscores] 与上面的唯一区别是按照的顺序是从大到小。

5、zrangebyscore key min max [withscores] [limit offset count] 返回key对应的有序集合中分数在min到max(包含min和max)之间的元素。在获得符合的列表后,offset制定从列表中第几个元素开始,count表示取得的个数。例如:arangebyscore tall 165 170 limit 2 5,表示获得身高在165-170之间的从第三个人开始的5个人。另外,可以用(min表示不包括min,(max表示不包括max。

6、zrevrangebyscore key min max [withscores] [limit offset count],与上面相同,只是返回顺序相反。

7、zincrby key increment member 给key对应有序集合中member的分数增加increment。

8、zcard key 获得key对应有序结合的数量。

9、zcount key min max 获得key对应的有序结合中在min max范围内的元素个数。

10、zrem key member [member...] 移除key对应有序集合中的一个或多个member。

11、zremrangebyrank key start stop 按照分数从小到大的顺序(最小的索引为0)删除处在制定排名位置的元素。

12、zremrangebyscore key min max 删除key对应有序集合中分数在min max之间的元素。

13、zrank key member 按照从小到大的顺序获得member的排名。

14、zinterstore destination numkeys key [key...] [weights weight [weight ...] ] [aggregate sum|min|max] 基本功能是计算有序集合的交集并且把结果存在destination中。destination中元素的分数的确定方式是:1)不给出参数的情况下默认是aggregate sum,及分数是这个元素在两个集合中分数的和;min即分数是该元素在两个集合中分数的较小值;max即较大值。3)另外,还可以通过weights weight [weight...]指定各个集合的权重。即最终分数是各个集合权重与分数乘积的和。

15、zunionstore destination numkeys key [key...] [weights weight [weight...] ] [aggregate sum|min|max] 与上面的唯一区别是用于集合的交运算。
六、其他

1、keys pattern 查找符合pattern的键,其中pattern支持glob通配符格式,返回所有匹配的键或者empty list or set


符号含义?匹配任意一个字符*匹配任意个(包括0个)任意字符[]匹配由括号限定范围内的任意一个字符,例如[a,b,f,d]或者[a-f]\x用于匹配转义符号,例如匹配“?”要用\?
2、exists key判断一个键是否存在,返回1或者0
3、del key [key ...]删除一个或者多个键,返回删除键的个数
4、type key 获得键值得数据类型,返回类型(string list set hash zset)或者none
0 0
原创粉丝点击