Redis解析之Redis命令

来源:互联网 发布:banner设计软件 编辑:程序博客网 时间:2024/05/19 22:56

1. 字符串:key_name value

incr key_name:键值+1
decr key_name:键值-1

incrby key_name amount:键值+amount(原始键值必须是整数)
decrby key_name amount:键值-amount(原始键值必须是整数)
incrbyfloat key_name amount:键值+amount(amount为float)

以上命令,若键key_name不存在,则初始键值默认为0。

2. 列表:key_name value_01 [value_02 …]

lpush/rpush key_name value [value …]:将一个或多个值插入列表左侧或右侧

lindex key_name index:返回列表中偏移量为index的元素
lrange key_name start stop:返回列表从start偏移量(包括)到stop偏移量(包括)之间的元素

lpop/rpop key_name:移除并返回列表最左/右侧的元素
ltrim key_name start stop:对列表进行修剪,只保留start偏移量(包括)到stop偏移量(包括)之间的元素
rpoplpush source_key destination_key:移除并返回列表source_key的最右侧元素,并将该元素添加到列表destination_key左侧
blpop/brpop key_name [key_name …] timeout:阻塞式移除并返回列表最左/右侧的元素(若指定了多个列表,则只操作第一个非空列表),如果(所有)列表没有元素会阻塞列表直到等待超时或发现(至少一个列表)可弹出元素为止
brpoplpush source_key destination_key timeout:移除并返回列表source_key的最右侧元素,并将该元素添加到列表destination_key左侧,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

llen key_name:获取列表长度

3. 集合:key_name value_01 [value_02 …]

与列表类似,但只能无序存储无重复元素

sadd key_name item [item …]:向集合添加一个或多个成员

smembers key_name:返回集合中的所有成员
srandmember key_name [count]:随机返回集合中一个或多个元素

spop key_name:随机移除并返回集合中的一个元素
srem key_name item1 [item2]:移除集合中一个或多个成员
smove source_key destination_key item:若集合source_key包括元素item,则从集合source_key移除元素item,并将元素添加至集合destination_key

scard key_name:返回集合中元素的数目

集合之间的关联命令:
1)交集:
sinter key_name1 [key_name2 …]:返回同时存在所有集合的元素
sinterstore destination_key key_name1 [key_name2 …]:将同时存在所有集合的元素,存储到集合destination_key(集合destination_key原元素会被清空)
2)差集:
sdiff key_name1 [key_name2 …]:返回存在于第一个集合,但不存在于其他集合的元素
sdiffstore destination_key key_name1 [key_name2 …]:将存在于第一个集合但不存在于其他集合的元素,存储到集合destination_key;(集合destination_key原元素会被清空)
3)并集:
sunion key_name1 [key_name2 …]:返回至少存在于一个集合的元素
sunionstore destination_key key_name1 [key_name2 …]:将至少存在于一个集合的元素,存储到集合destination_key(集合destination_key原元素会被清空)

4. 哈希:key_name field_01 value_01 [filed_02 value_02 …]

hset key_name field_01 value_01:向哈希添加一个键值对
hmset key_name field_01 value_01 [filed_02 value_02 …]:向哈希添加一个或多个键值对

hget key_name field_01:获取一个键值
hmget key_name field_01 [filed_02 …]:获取一个或多个键值
hgetall key_name:获取所有键值对
hkeys key_name:获取所有键
hvals key_name:获取所有值

hdel key_name field_01 [filed_02 …]:删除一个或多个键值对

hlen key_name:获取键值对的数目

hincrby key_name field increment:为字段field的整数值加上增量increment(field的原始值必须是整数)
hincrbyfloat key_name field increment:为字段field的浮点数值加上增量 increment

5. 有序集合:key_name score_01 value_01 [score_02 value_02 …]

score为double类型,score可以重复value不能重复,集合按分值从小到大排列(分值相同时,按value的字符串二进制排序)

zadd key_name score member [score member …]:向有序集合添加一个或多个成员,或者更新已存在成员的分数

zrange key_name start stop [withscores]:返回有序集合成指定索引区间内的成员(包括两索引边界)
zrevrange key_name start stop [withscores]:返回有序集合成指定索引区间内的成员(包括两索引边界),按分值从大到小排列
zrangebyscore key_name min max [withscores] [limit offset count]:返回有序集合指定分数区间内的成员;([limit offset count],表示对分数区间内的元素再次筛选,offset:索引,count:返回的元素数目)
zrank key_name value:返回元素的索引
zscore key_name value:返回元素的分数
zcount key_name min max:返回指定区间分数的成员数目;(包括两分数边界)
zincrby key_name increment value:将指定成员的分数加上增量 increment

zrem key_name member [member …]:从有序集合中移除一个或多个成员
zremrangebyrank key_name start stop:从有序集合中移除指定索引区间的所有成员(包括两索引边界)
zremrangebyscore key_name min max:从有序集合中移除给定分数区间的所有成员(包括两分数边界)

zcard key_name:返回集合中元素的数目

集合之间的关联命令:
1)交集:
zinterstore destination key-count key[key…] [weights weight] [aggregate sum|min|max]:(key可以是无序集合,集合各元素分数默认为1)
key-count:参与交集的集合数目
weights:对应集合分数权重(默认为1)
sum|min|max:destination中各value分数,取各集合中value分数的累加/最小/最大。若同时指定了权重,则sum|min|max以各集合权重分数为操作对象
2)并集:
zunionstore destination key-count key[key…] [weights weight] [aggregate sum|min|max]

6. sort

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC | DESC] [ALPHA] [STORE destination]

据5种数据类型的键,对列表、集合以及有序集合进行排序
1)BY pattern:按pattern组成新的key,并对key按新key进行排序,支持通配符,hash/zsort->字段名:表示使用hash/zsort中特定字段排序;
2)LIMIT offset count:对于排序结果,返回index=offset之后的count个元素;
3)GET pattern [GET pattern …]:根据排序结果返回键值,支持通配符,#:表示返回被排序键key的值;
4)ASC | DESC:从小到大/从大到小排序,默认为ASC;
5)ALPHA:按字符串排序,默认为按数字排序;
6)STORE destination:将排序结果另存为;
eg:SORT uid BY user_level_* GET user_name_*:uid为list,user_level_1/2/3/4为string,user_name_1/2/3/4为string。

7. 键的过期时间

注:对于list、set、hash、zset等容器来说,只能为整个键设置过期时间,而无法为键里面的单个元素设置过期时间。

set key value EX seconds:将key value存入redis,且保存时长为seconds秒
set key value PX milliseconds:将key value存入redis,且保存时长为milliseconds毫秒

expire key_name seconds:对于给定的键key_name,设置seconds秒之后无效或被删除
pexpire key_name milliseconds:对于给定的键key_name,设置milliseconds毫秒之后无效或被删除
expireat key_name timestamp:对于给定的键,设置过期时间为给定的unix时间戳(精度为秒)
pexpireat key_name timestamp:对于给定的键,设置过期时间为给定的unix时间戳(精度为毫秒)

persist key_name:移除key_name的过期时间。

ttl key_name:查看剩余多少秒(Time To Live,TTL)
pttl key_name:查看剩余剩余多少毫秒

Key的过期机制:
1、被动删除:只有当Key被访问时,Redis才会被动检查Key是否过期,若过期则删除Key并返回NIL。
优点:对CPU友好:该删除操作只有在不得不的情况下进行,不会在其他的过期Key上浪费CPU时间。
缺点:对内存不友好:即使Key已过期,但是在被操作之前不会被删除,会一直占用内存空间。
1)set key newValue:设置新值,会删除过期时间。
2)rename:key value存在过期时间,则rename key newKey后,newKey的过期时间与key保持一致。
3)incr、lpush、hset不会清除过期时间。

2、主动删除:每秒钟执行10次(配置项:hz)以下流程:
1)随机抽取100个设定了有效期的key,若已过期,则将其删除;
2)若抽取到的100个key中,超过25个已过期,则返回步骤1。

3、当已用内存超过maxmemory限定时,触发主动清理策略。

8. multi/exec

将客户端在不被其他客户端打断的情况下,依次执行被multi/exec所包围的命令。当一个事务执行完毕后,redis才会处理其他客户端的命令

原理:
当redis收到一个客户端的multi命令后,会将该客户端之后发送的所有命令都放到一个队列里,直至该客户端发送exec命令为止,然后redis在不被打扰的情况下,依次执行队列中的命令。
特点:
1)事务执行过程中,若某命令执行失败,该命令之后的其他命令仍然会继续执行;
2)redis不支持回滚操作。

watch key_name:检测watch命令之后,至第一个multi/exec事务执行之前,键对应的值是否改变。若改变,则随后的第一个multi/exec事务不执行。
unwatch:watch执行之后和multi执行之前,取消对所有key的监视(随后的multi/exec事务照常执行)。
discard:在multi和exec之间执行,用于取消事务,放弃执行事务块内的所有命令(discard命令之后无需执行exe命令,否则会报错)。

9. 主从

slaveof no one:指定该Redis非其他Redis的salve
slaveof host port:指定该Redis为host port redis的slave

10. pipeline()

目的:减少客户端与服务端的交互
1)不传参或传入true:客户端使用multi/exec包裹起要执行的所有命令
2)传入false:客户端会像multi/exec一样收集所有命令,但不会用multi/exec包裹这些命令。

例:
pipe = pipeline(false);
命令…
pipe.execute();