Redis中的5种数据类型及常用命令

1.字符串类型

对于字符串大家肯定都非常熟悉,不管是哪种编程语言都会有字符串的身影。它是Redis中最基本的数据类型,他能存储任意形式的字符串,包括二进制数据,是Redis中其他数据类型的基础。下面我们就介绍一下Redis操作字符串的常用命令。
赋值与取值:
SET key value
GET key

递增数字
INCR key
当递增的不是整数时会报错:

127.0.0.1:6379> set age df
OK
127.0.0.1:6379> INCR age
(error) ERR value is not an integer or out of range

递增指定整数
INCRBY key increment

减少整数
INCT key
INCRBY key decrement

增加浮点数
INCRBYFLOAT key increment

向尾部追加
APPEND key value

获取字符串长度
STRLEN key

设置获取多个键值
MSET key value [key value ...]
MGET key [key ...]

位操作
  获取字符串类型键指定位置的二进制位的值(0或1),超出实际长度返回0
GETBIT key offset

设置字符串类型指定二进制位的值(设置0或1),如果设置的位置超过字符串二进制位的长度,则将当前长度到指定偏移量之间的二进制位都设置成0
SETBIT key offset value

获取字符串类型键中为1的二进制位个数,start、end是字节的范围
BITCOUNT key [start] [end]

BITOP命令可以对多个字符串进行位运算,并将结果存储在destkey参数指定的键中。BITOP支持的运算操作有AND、OR、XOP和NOT。
BITOP operation destkey key [key ...]
  下面我们对bar和arr进行OR运算:

redis>SET fool bar
OK
redis>SET foo2 arr
OK
redis>BITOP OR foo1 foo2
(integer) 3
redis>GET res
"car"

Redis2.8.7引入BITPOS命令,可以获取指定键第一个0或1的位置

redis>SET foo bar
OK
redis>BITPOS foo 1
(integer) 1

BITPOS key value start end
  指定区间查询某个key的二进制位中出现0或1的位置(start和end是字节),返回的偏移量是从开头算的。

redis>BITPOS foo 1 1 2
(integer) 9

有一个有趣的现象:如果查询指定区间内所有的二进制位值都为1,在没有指定end的情况下查询第一个出现0的位置,返回的结果将是键值长度下一个字节位置的偏移量,因为redis认为键值长度以后的二进制位都是0。

2.散列表 hash

Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构。下面我们介绍一下散列类型(hash)常用的命令:

设置获取字典元素键值
hset key field value
hget key field

设置获取多个字典元素键值
hmset key field value [field value...]
hmget key field [field...]

获取字典中所有键值
hgetall key

判断是否存在,不存在赋值
hexists key field value

增加数字的值
hincrby key key field increment

删除指定字段
hdel key field [field]

只获取keys
hkeys key

只获取values
hvals key

获取长度
hlen key

3.列表类型

列表类型(list)可以存储一个有序字符串列表,常用的操作是向列表两端添加元素,或者获取列表某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度越快。(事实上获取一个长度为100000和一个长度为20列表的第10个元素的速度是一样的)。下面我们就介绍一下列表(list)常用的命令:

向列表两端添加元素:
lpush key value [value...]
rpush key value [value...]

从列表两端弹出元素:
lpop key
rpop key

获取列表长度
llen key

获取列表片段(包含头,也包含尾),如果是负数是从右边数
lrange key start stop

删除值为value的元素(当count大于0时从左面删count个,count小于0从右面算起删count个,等于0,全删)
lrem key count value

返回指定索引的元素
lindex key indix

设置指定索引元素的值
lset key index value

删除索引之外的元素
ltrim key start end

将value插入到值为pivot的前面或后面
linsert key beform|after pivot value

从source列表右边弹出一个元素添加到destistion列表的左边
rpoplpush source destinstion

redis 中设置key的过期时间:
EXPIRE key seconds

4.集合类型

集合的概念我们在高中都已经学过,在集合中的每个元素都是不同的,且没有顺序。一个集合最多能存储2^31-1个字符串。
集合与列表有相识之处,但很容易将他们区分开:

 集合类型列表类型
存储内容至多2^31-1个字符串至多2^31-1个字符串
有序性
唯一性

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合在Redis中是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是O(1)。最方便的是多个集合之间还可以进行并集、交集和差集运算,下面我们就介绍一下集合(set)的常用命令:
增加删除元素(如果键不存在直接创建):
SAAD key member [member ...]
SREM key member [member ...]

获取集合中所有元素
SMEMBERS key

判断元素是否在集合中
SISMEMBER key member

集合间的运算(差集set1-set2、交集set1nset2、并集set1Uset2)
SDIFF set1 [set2 ...]
SINTER set1 [set2 ...]
SUNION set1 [set2 ...]

获取集合中元素的个数
SCARD key

进行集合间的运算,并将结果存储:
SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONTORE destination key [key ...]

随机获取集合中的元素(count 表示一次获取元素的个数):
SRANDMEMBER key [count]

从集合中弹出一个元素:
SPOP key

5.有序集合

有序集合就是在集合的基础上为每个元素关联了一个分数,这使得我们不仅可以完成插入删除和判断元素是否存在集合等集合类型支持的操作,还能够获取分数最高或最低的N个元素、获取指定分数范围内的元素等与分数有关的操作。虽然集合中的每个元素是不同的,但是他们的分数是可以相同的。
有序集合和列表的比较:

  • 二者都是有序的
  • 二者都可以获取某一范围的元素
  • 列表类型通过双向链表实现,获取靠近两端的元素速度极快,而当元素增加后获取中间的元素较慢,所以它适用于“新闻”、“新鲜事”、“日志”等很少访问中间元素的应用。
  • 有序集合是使用散列表和跳跃表(skip list)实现的,所以读取中间位置的元素也是较快的(时间复杂度为:O(log(N)))
  • 列表中不能简单的调整某个元素的位置,但有序集合可以(通过更改元素的分数)
  • 有序结合要比列表更耗内存。

下面我们简单介绍一下有序列表常用的命令:

增加元素(+inf和-inf表示正无穷和负无穷):
ZADD key score member [score member]

获取元素分数:
ZSCORE key [member]

获得排名在某个范围的元素列表(WITHSCORES:表示显示分数,序号为-1表示最后一个元素):
ZRANGE key start stop [WITHSCORES]:从小到大
ZREFVRANGE key start stop [WITHSCORES]:从大到小

获取指定分数范围的元素:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
这条命令是从小到大获取分数位于min与max之间的元素,加上WITHSCORES表示查出元素的分数,LIMIT offset countSQL中的用法相同,表示查询起点为offset 偏移量为count

增加某个元素的分数
ZINCRBY key increment member

获取集合中元素个数
ZCARD key

获取指定分数范围内元素的个数
ZCOUNT key min max

删除一个或多个元素
ZREM key member [member ...]

按照排名范围删除元素
ZREMRANGEBYRANK key start stop

按照分数范围删除元素
ZREMRANGEBYSCORE key min max

获取元素的排名
ZRANK key member
ZREVRANK key member

计算有序集合的交集
ZINTERSTORE destination munkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
destination键中元素的分数是由AGGREGATE参数决定的:

  • AGGREGATE是SUM时(也是默认值),destination键中元素的分数是每个参与计算的集合中该元素分数的和;
  • AGGREGATE是MIN时,destination键中元素的分数是参与计算的集合中该元素分数的最小值;
  • AGGREGATE是MAX时,destination键中的元素分数是参与计算的集合中该元素的最大值。

ZINTERSTORE命令还能够通过WEIGHTS参数设置每个集合的权重,每个集合在参与计算时元素的分数都会被乘上该元素的权重。
另外还有一种命令与ZINTERSTORE命令的用法一样,名为ZUNIONSTORE,它的作用是计算集合间的并集。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值