首页 » 技术分享 » redis操作命令记录

redis操作命令记录

 

做个记录,方便对redis命令的测试:

flushdb --清空数据库

===对字符串的操作

set --设置一个字符串键值对
mset  --设置多个字符串键值对
setnx --key不存在时设置值value
setex --创建key时指定过期时间
set key value ex 10 --10秒后过去
expire key 5 --设置key的值5秒后过期 ,pexpire(毫秒)时间单位不一样
expireat timestamp --到指定时间过期
pexpireat  --时间单位为毫秒

persist key --删除过期时间

ttl : time to live
ttl key --剩余多长存活时间

--返回-2,表示曾经活过,但是现在消亡了
--返回-1,表示key存在,但是没有设置过期时间
--返回剩余的秒或者毫秒

strlen --返回key对应value的长度
strrange key start end   --字符串截取

type key;--返回键的类型
exists key --键是否存在

--键重命名
rename  key  newkey
renamenx key newkey

--删除键
DEL key[key...]

--获取值
get key
--获取多个值
mget key [key...]

--返回旧值并设置新值,如果键不存在就创建并赋值
getset key value

--字符串长度(值的长度)
strlen key

--追加字符串,如果存在就追加,不存在就等同于set key value
appen key value

--获取子字符串,字符串开始可以用0表示,字符串结尾可以用-1表示
getrange key start end

--覆盖字符串,从offset开始以value来替换后面的字符串值
setrange key offset value

--步长1的增减,字符串值会被解释成64位的有符号十进制数来操作,结果依然转成字符串
INCR key --key对应的value值加1
DECR key --key对应的value值减1

--步长增减,字符串值会被解释成64位的有符号十进制数来操作,结果依然转成字符串
INCRBY key decrement
DECRBY key decrement

===============================================
--位图bitmap
位图不是真正的数据类型,它是定义在字符串类型中
一个字符串类型的值最多能存储512M字节的内容
位上限:2^(9+10+10+3)=2^32b

设置某一位上的值,offset偏移量,从0开始。因为是二进制数,偏移量从右边开始
setbit key offset value

获取某一位上的值
getbit key offset

返回指定值0或者1在指定区间上第一次出现的位置
BITPOS key [start] [end]

===
位操作
opration可以是AND 、OR、NOT、XOR这四种操作中的任意一种
BITOP AND destkey key [key...] 对一个或者多个key求逻辑并,将结果保存到destkey
BITOP OR destkey key [key...] 对一个或者多个key求逻辑或,将结果保存到destkey
BITOP NOT destkey key  对给定key求逻辑非,将结果保存到destkey
BITOP XOR destkey key [key...] 对一个或者多个key求逻辑异或,将结果保存到destkey

除了NOT操作,其它操作都可以接受一个或者多个key作为输入
当BITOP处理不同长度的字符串时,较短的那个字符串所缺少的那部分会被看做0
空的key也被看做是包含0的字符串序列

--统计指定区间上值为1的个数
BITCOUNT key [start] [end]
从左向右从0开始,从右向左从-1开始。注意:官方的start和end是位,据测试是字节
BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计

BITCOUNT testkey 0 -1 等同于 BITCOUNT testkey 
最常用的就是BITCOUNT testkey

==
位图使用场景:
1、网站用户的上线次数
用户ID作为key,天作为offset ,上线置为1·
SETBIT U500 1 1
SETBIT U500 30 1
BITCOUNT U500
KEYS U*

2、按天统计网站活跃用户
天作为key,用户ID作为offset,上线置为1
求一段时间内活跃用户
SETBIT 20160602 15 1
SETBIT 20160601 123 1
SETBIT 20160606 123 1

求6月1日到6月10日的活跃用户
BITOP OR  20160601-10 
BITCOUNT 20160601-10
结果为2

=====
=====
列表 linkedList ,ArrayList
基于linkedList实现
元素是字符串类型
列表头尾增删快,中间增删慢
元素可以重复出现
可以包含2^32-1个元素

。列表的索引 

命令:B 阻塞 l左侧操作 r 右侧开始操作 X 存在
左右或者头尾压入元素
LPUSH key  value[value...]
LPUSHX key value
RPUSH  key value[value...]
RPUSHX key  value

左右或者头尾弹出元素
LPOP key
RPOP key

从一个列表尾部弹出元素压入到另一个列表的头部
RPOPLPUSH source destination

返回指定范围的列表元素
LRANGE key start stop
LRANGE key 0 -1 表示返回所有元素

获取指定位置的元素
LINDEX key  index
设置指定位置元素的值
LSET key index value
列表的长度,元素的个数
LLEN key

从列表头部开始删除值等于value的元素count次,count>0 从表头开始向表尾计数,count<0从表尾开始向表头。count=0,移除所有与value相等的值
LREM list count value

去除指定范围外元素
LTRIM key start stop

li.
RPUSH listkey c abc c ab 123 ab bj ab redis list
LTRIM listkey 0 1
LTRIM listkey 1 -1
LTRIM listkey 1 10000

微博的评论最后500条
LTRIM u1234:forumid:comments 0 499

在列表中某个存在的值前后插入元素,如果listkey、pivot不存在,不进行任何操作
LINSERT listkey BEFORE|AFTER pivot value
li.
RPUSH lst clojure c lua
LINSERT lst AFTER c python
LINSERT lst BEFORE C ruby

阻塞,阻塞的命令都以B开头:
如果弹出的列表不存在或者为空,就会阻塞
超时时间设置为0,就是永久阻塞,直到有数据弹出为止
入股多个客户端阻塞在同一列表上,使用First in first service原则,先到先服务

左右或者头尾阻塞弹出元素
BLPOP key[key...] timeout
BRPOP key[key...] timeout

从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout

====
=====
hash散列
由field和关联的value组成的map键值对
field和value是字符串类型
一个hash最多可包含2^32-1个元素

hash散列的用途;
节约存储空间,因为每创建一个键,需要存储这个键的一些附加管理信息(比如这个键的类型,最后一次被访问时间,过期时间等)。所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,花在管理数据库键上的CPU也就会
越多。
局限性:超时时间只能限制key上

不适合hash的情况:
1、使用二进制位操作命令:因为redis目前支持对字符串键进行SETBIT 、GETBIT、BITOP等操作,如果你想使用这些操作,那么只能用字符串键,虽然散列也能保存二进制数据
2、使用过期时间功能:Redis目前只支持对键设置过期时间,而不能对散列的field进行过期操作

命令:H开头
HSET key field value
HSETNX key field value --key的field不存在的情况下执行,key不存在直接创建

设置多个字段:
HMSET key field value [key value ...]

返回字段个数
HLEN key

判断字段是否存在
HEXISTS key field  --key或者field不存在返回0

返回字段值
HGET key field
HMGET key field [field...]

返回所有的键值对
HGETALL key

返回所有的字段名
HKEYS key

返回所有值
HVALS key

在字段对应的值上进行整数的增量操作,如果field不存在,相当于HSET
HINCRBY key field incrment

在字段对应的值上进行浮点数的增量计算
HINCRBYFLOAT key field incrment

删除指定的字段
HDEL key field[field...]

li.
HINCRBY listkey field 1000
HINCRBY listkey field -50
HINCRBYFLOAT listkey field 3.14
HDEL listkey field

li.
微博好友关注列表
用户ID为key ,field为好友ID,value为关注时间
user:1000 user:606 20151208

用户维度统计
统计数包含:关注数、粉丝数、喜欢商品数、发帖数
用户ID为key,不同维度为field,value为统计数
比如关注了5人:
HSET user:100000 follow 5
HINCRBY user:100000 follow 1

===SET
无序、去重,元素为字符串类型 最多包含2^32-1个元素
命令:
增加一个或者多个元素
SADD key member[member...] --如果元素已经存在,则自动忽略
li.
SADD friends jack peter "mist li"

移除一个或者多个元素,元素不存在,自动忽略
SREM key member[member...]

返回集合包含的所有元素。如果集合元素过多,例如百万个,可能会造成服务器阻塞
SMEMBERS key

检查给定元素是否存在于集合中
SISMEMBER key member 

随机返回集合中指定个数的集合。
若count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。如果count大于等于集合基数,那么返回整个集合。
若count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。
如果count为0,返回空
如果count不指定,随机返回一个元素
SRANDMEMBER key [count]

场景:抽奖

返回集合中元素的个数
SCARD key  --键的结果会保存信息,集合长度就记录在里面,所以不需要遍历

随机从集合中移除并返回这个被移除的元素
SPOP key

把元素从源集合移动到目标集合
SMOVE source destination member 

集合的操作:
差集,原来的集合并没有改变:
SDIFF key [key...]  --从第一个key的集合中去除其他集合和自己的交集部分
SDIFFSTORE destination key[key...] 将差集结果存储在目标key中

li.
SADD key1 123 456 789
SADD key2 123 456 999
SDIFF key1 key2  --结果为789
SDIFFSTORE key3 key1 key2 --将结果789存储到名为key3的集合中

交集:
SINTER key [key...] --取所有集合交集部分
SINTERSTORE destination key [key...] --将交集结果存储到名为destination的集合中

li.
SADD key1 123 456 789
SADD key2 123 456 999
SINTER key1 key2 --结果集为123 456
SINTERSTORE key3 key1 key2 --将交集结果123 456 存储到名为key3的集合中

并集:
SUNION key[key...] --取所有集合的并集
SUNIONSTORE key3 key[key...] --将交集结果存储到名为key3的集合中

场景:微博中的共同关注
取集合中的交集即可,可以设置为定期执行,然后从缓存中取

===sortedset有序集合:有序 去重,元素为字符串类型,最多包含2^32 - 1个元素。每一个元素都关联着一个浮点数分值(score),并且按照从小到大的顺序排列集合中的元素,分数可以相同。
命令:
增加一个或者多个元素,如果元素已经存在,就使用新的score
ZADD key store member[score member]

删除一个或者多个元素,元素不存在,自动忽略
ZREM key member[member...]

显示分值
ZSCORE key member

增加或者减少分值,score为负数就是减少
ZINCRBY key score  member

返回元素的排名
ZRANK key member
逆序排名
ZREVRANK key member

返回某个区间的值,如果score相同,则按照字典序列排序,默认从小到大。start和stop可以为负值。
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

返回指定分值区间元素,-inf和+inf分别表示负无穷和正无穷
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

li。
ZRANGEBYSCORE key -inf +inf

ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

移除指定排名范围的元素
ZREMRANGEBYRANK key start stop
li.
ZREMRANGEBYRANK key 0 2
ZRANGE key 0 -1 --返回所有元素

移除指定分值范围的元素
ZREMRANGEBYSCORE key min max

返回集合中元素的个数
ZCARD key 

返回指定范围中元素的个数
ZCOUNT key min  max

li.
ZCOUNT key 4 7
ZCOUNT key (4 7 --相当于>4

并集:
ZUNIONSTORE destination numkeys key[key...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys指定key的数量,必须
WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
AGGREGATE选项,指定并集结果的聚合方式

转载自原文链接, 如需删除请联系管理员。

原文链接:redis操作命令记录,转载请注明来源!

0