redis常用命令

redis种对value支持5种数据结构。String、List、Set、Hash、ZSet。

字符串

基本命令 行为
get 获取给定键的值
set 设置给定键的值
del 删除给定键的值
redis-primary:6379> set name lucy
OK
redis-primary:6379> get name
"lucy"
redis-primary:6379> del name
(integer) 1
redis-primary:6379> get name
(nil)
redis-primary:6379>

自增命令 行为
incr 键存储的值加1
decr 键存储的值减1
incrby 键存储的值增加给定整数
decrby 键存储的值减去给定整数
incrbyfloat 键存储的值增加给定浮点数
redis-primary:6379> set num 10
OK
redis-primary:6379> get num
"10"
redis-primary:6379> incr num
(integer) 11
redis-primary:6379> decr num
(integer) 10
redis-primary:6379> incrby num 10
(integer) 20
redis-primary:6379> decrby num 4
(integer) 16
redis-primary:6379> incrbyfloat num 0.99
"16.99"
redis-primary:6379>
字符串处理命令 行为
append 给定键的值末尾拼接给定的值
getrange 获取值在偏移量start至end范围内的字符串,包含start,end在内
setrange 将从偏移量start开始的字符串设置为给定值
redis-primary:6379> set sayhi hello
OK
redis-primary:6379> get sayhi
"hello"
redis-primary:6379> append sayhi ,world
(integer) 11
redis-primary:6379> get sayhi
"hello,world"
redis-primary:6379> getrange sayhi 6 10
"world"
redis-primary:6379> setrange sayhi 5 /
(integer) 11
redis-primary:6379> get sayhi
"hello/world"
redis-primary:6379>

列表(List)

命令 行为
lpush 列表左侧压入给定值
lpop 列表左侧弹出给定值,返回弹出值
lrange 获取列表在给定范围上的值
lindex 获取列表给定下标下的值
(integer) 1
redis-primary:6379> lpush names lilly
(integer) 2
redis-primary:6379> lrange names 0 -1
1) "lilly"
2) "lucy"
redis-primary:6379> lindex names 0
"lilly"
redis-primary:6379> lpop names
"lilly"
redis-primary:6379> lrange names 0 -1
1) "lucy"
redis-primary:6379>
截取命令 行为
ltrim 对列表截取,保留偏移量start至end在内的元素,包含start和end
redis-primary:6379> lpush names lucy lilly hanmeimei kate
(integer) 4
redis-primary:6379> lrange names 0 -1
1) "kate"
2) "hanmeimei"
3) "lilly"
4) "lucy"
redis-primary:6379> ltrim names 2 3
OK
redis-primary:6379> lrange names 0 -1
1) "lilly"
2) "lucy"
redis-primary:6379>
阻塞弹出命令 行为
blpop 从非空列表中弹出最左侧元素,timeout内阻塞等待元素
brpop 从非空列表中弹出最右侧元素,timeout内阻塞等待元素
rpoplpush 从第一个列表中取出最右侧元素,放入第二个列表中最左侧
brpoplpush 从第一个列表中取出最右侧元素,放入第二个列表中最左侧,timeout内阻塞等待元素
//第一个客户端
redis-primary:6379> blpop list1 10
1) "list1"
2) "a"
(2.01s)
redis-primary:6379>
//第二个客户端
redis-primary:6379> lpush list1 a
(integer) 1
redis-primary:6379>
redis-primary:6379> lpush list1 a b
(integer) 2
redis-primary:6379> lpush list2 c d
(integer) 2
redis-primary:6379> lrange list1 0 -1
1) "b"
2) "a"
redis-primary:6379> lrange list2 0 -1
1) "d"
2) "c"
redis-primary:6379> rpoplpush list1 list2
"a"
redis-primary:6379> lrange list1 0 -1
1) "b"
redis-primary:6379> lrange list2 0 -1
1) "a"
2) "d"
3) "c"
redis-primary:6379>
//第一个客户端
redis-primary:6379> brpoplpush list1 list2 10
"a"
(1.78s)
redis-primary:6379> lrange list2 0 -1
1) "a"
redis-primary:6379> lrange list1 0 -1
(empty list or set)
redis-primary:6379>
//第二个客户端
redis-primary:6379> lpush list1 a
(integer) 1
redis-primary:6379>

集合(Set)

无序不重复集合

命令 行为
sadd 向集合添加给定值
smembers 返回集合所有值
sismember 检查给定值是否存在于集合
srem 在集合中删除给定值
redis-primary:6379> sadd names lucy
(integer) 1
redis-primary:6379> sadd names lilly
(integer) 1
redis-primary:6379> smembers names
1) "lilly"
2) "lucy"
redis-primary:6379> sismember names lucy
(integer) 1
redis-primary:6379> srem names lucy
(integer) 1
redis-primary:6379> smembers names
1) "lilly"
redis-primary:6379>
随机移除命令 行为
scard 返回集合元素数
spop 随机移除一个元素,返回该元素
smove 如果第一个集合包含该元素,就将该元素添加到第二个集合中
redis-primary:6379> sadd names lucy lilly kate
(integer) 3
redis-primary:6379> smembers names
1) "kate"
2) "lilly"
3) "lucy"
redis-primary:6379> smove names names01 lilly
(integer) 1
redis-primary:6379> smembers names
1) "kate"
2) "lucy"
redis-primary:6379> smembers names01
1) "lilly"
redis-primary:6379> spop names
"lucy"
redis-primary:6379> smembers names
1) "kate"
redis-primary:6379>
组合命令 行为
sdiff 返回存在于第一个集合,不存在其他集合中的元素,差集
sdiffstore 差集数据存储到给定集合
sinter 返回同时存在于所有集合的元素,交集
sinterstore
sunion 返回至少存在一次的元素,并集
sunionstore
redis-primary:6379> sadd alpha01 a b c d
(integer) 4
redis-primary:6379> sadd alpha02 b d e f
(integer) 4
redis-primary:6379> sdiff alpha01 alpha02
1) "a"
2) "c"
redis-primary:6379> sinter alpha01 alpha02
1) "b"
2) "d"
redis-primary:6379> sunion alpha01 alpha02
1) "f"
2) "b"
3) "e"
4) "d"
5) "c"
6) "a"
redis-primary:6379> sdiffstore diffalpha alpha01 alpha02
(integer) 2
redis-primary:6379> smembers diffalpha
1) "a"
2) "c"
redis-primary:6379> sinterstore interalpha alpha01 alpha02
(integer) 2
redis-primary:6379> smembers interalpha
1) "b"
2) "d"
redis-primary:6379> sunionstore unionalpha alpha01 alpha02
(integer) 6
redis-primary:6379> smembers unionalpha
1) "f"
2) "b"
3) "e"
4) "d"
5) "c"
6) "a"
redis-primary:6379>

散列

命令 行为
hset 向散列添加给定的键值对
hget 获取散列中指定键的值
hgetall 获取给定散列所有的键值对
hdel 删除散列中给定的键值对
redis-primary:6379> hset lucy name lucy
(integer) 1
redis-primary:6379> hset lucy age 12
(integer) 1
redis-primary:6379> hset lucy gender girl
(integer) 1
redis-primary:6379> hget lucy name
"lucy"
redis-primary:6379> hgetall lucy
1) "name"
2) "lucy"
3) "age"
4) "12"
5) "gender"
6) "girl"
redis-primary:6379> hdel lucy gender
(integer) 1
redis-primary:6379> del lucy
(integer) 1
redis-primary:6379>
批量命令 行为
hmset 批量设置键值对
hmget 获取一个或多个键的值
hdel 删除散列中的一个或多个键值对
hlen 返回散列中键值对数量
redis-primary:6379> hmset lucy name lucy age 12 gender girl
OK
redis-primary:6379> hlen lucy
(integer) 3
redis-primary:6379> hgetall lucy
1) "name"
2) "lucy"
3) "age"
4) "12"
5) "gender"
6) "girl"
redis-primary:6379> hmget lucy name age
1) "lucy"
2) "12"
redis-primary:6379> hdel lucy name age
(integer) 2
redis-primary:6379> hgetall lucy
1) "gender"
2) "girl"
redis-primary:6379>
键值对命令 行为
hexists 键是否存在散列中
hkeys 返回散列中所有的键
hvals 返回散列中所有的值
hincrby 散列中给定键的值增加指定整数
hincrbyfloat 散列中给定键的值增加指定浮点数
redis-primary:6379> hmset lucy name lucy age 12 gender girl
OK
redis-primary:6379> hexists lucy name
(integer) 1
redis-primary:6379> hkeys lucy
1) "name"
2) "age"
3) "gender"
redis-primary:6379> hvals lucy
1) "lucy"
2) "12"
3) "girl"
redis-primary:6379> hgetall lucy
1) "name"
2) "lucy"
3) "age"
4) "12"
5) "gender"
6) "girl"
redis-primary:6379> hincrby lucy age 10
(integer) 22
redis-primary:6379> hget lucy age
"22"
redis-primary:6379> hincrbyfloat lucy age 10.2
"32.2"
redis-primary:6379> hget lucy age
"32.2"
redis-primary:6379>

有序集合(ZSet)

有序集合和散列一样,存储的是键值对。键称为成员(member),值称为分值(score)。是redis中唯一可以用键访问分值,可以用分值排列顺序访问元素的数据结构

命令 行为
zadd 向有序集合添加给定分值的成员
zrange 根据元素的排列顺序获取给定范围的多个元素
zrangebyscores 获取有序集合在给定分值范围内的所有元素
zrem 在有序集合中删除给定成员
redis-primary:6379> zadd sort 1 lucy
(integer) 1
redis-primary:6379> zadd sort 0 lilly
(integer) 1
redis-primary:6379> zadd sort 3 hanmeimei
(integer) 1
redis-primary:6379> zrange sort 0 -1 withscores
1) "lilly"
2) "0"
3) "lucy"
4) "1"
5) "hanmeimei"
6) "3"
redis-primary:6379> zrem sort lucy
(integer) 1
redis-primary:6379> zrange sort 0 -1 withscores
1) "lilly"
2) "0"
3) "hanmeimei"
4) "3"
redis-primary:6379> zrangebyscore sort 0 2
1) "lilly"
redis-primary:6379> zrangebyscore sort 0 2 withscores
1) "lilly"
2) "0"
redis-primary:6379>
命令 行为
zcard 返回成员数
zincrby 给定成员的分值增加指定值
zscore 获取给定成员的分值
zrank 获取成员在有序集合中的排序
zcount 获取给定最小分值和最大分值中的成员数量
redis-primary:6379> zadd sort 12 lucy 34 lilly 1 hanmeimei 28 kate
(integer) 4
redis-primary:6379> zcard sort
(integer) 4
redis-primary:6379> zincrby sort 10 lilly
"44"
redis-primary:6379> zscore sort lilly
"44"
redis-primary:6379> zcount sort 0 100
(integer) 4
redis-primary:6379> zrank sort lilly
(integer) 3
redis-primary:6379> zrank sort hanmeimei
(integer) 0
命令 行为
zrevrank 返回成员的排名,成员按照从大到小排列
zrevrange 返回有序集合给定排名范围内的成员,成员按照从大到小排列
zrangebyscore 返回有序集合中分值位于min和max之间的所有成员
zrevrangebyscore 返回有序集合中分值位于min和max之间的所有成员,并按照分值从大到小排列
zremrangebyrank 移除有序集合中排名介于start和end之间的所有成员
zremrangebyscore 移除有序集合中分值介于min和max之间的所有成员
zinterstore 根据member执行交集,score根据指令sum|max|min执行相应操作
zunionstore 根据member执行并集,score根据指令sum|max|min执行相应操作
redis-primary:6379> zadd lucy 100 english 60 chinses 80 math
(integer) 3
redis-primary:6379> zadd lilly 90 english 89 chemical
(integer) 2
redis-primary:6379> zinterstore result1 2 lucy lilly
(integer) 1
redis-primary:6379> zrange result1 0 -1 withscores
1) "english"
2) "190"
redis-primary:6379> zinterstore result1 2 lucy lilly aggregate min
(integer) 1
redis-primary:6379> zrange result1 0 -1 withscores
1) "english"
2) "90"
redis-primary:6379>

发布订阅

命令 行为
publish 向通道发送消息
subscribe 订阅指定通道
//发送方
redis-primary:6379> publish channel01 hello
(integer) 1
redis-primary:6379> publish channel01 lucy
(integer) 1
redis-primary:6379> publish channel01 pattern:receive,message:lucy001
(integer) 1
redis-primary:6379>

//接受方
//redis-cli订阅消息后无法执行别的命令
redis-primary:6379> subscribe channel01
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel01"
3) (integer) 1
1) "message"
2) "channel01"
3) "hello"
1) "message"
2) "channel01"
3) "lucy"
1) "message"
2) "channel01"
3) "pattern:receive,message:lucy001"

过期时间

命令 行为
expire 给键设置过期时间,单位秒
expireat 设置过期时间为unix时间戳
persist 移除键的过期时间
ttl 查看键过期时间还剩多少秒
redis-primary:6379> set name lucy
OK
redis-primary:6379> expire name 100
(integer) 1
redis-primary:6379> ttl name
(integer) 97
redis-primary:6379> persist name
(integer) 1
redis-primary:6379> ttl name
(integer) -1
redis-primary:6379> get name
"lucy"
redis-primary:6379> pttl name
(integer) -1
redis-primary:6379>

事务

命令 行为
multi 开启事务
exec 提交事务
discard 取消事务
watch 用于事务开始前监听任意数量的键,如果事务过程中监听的键被其他客户端修改,则整个事务不再执行
//第一个客户端
redis-primary:6379> watch name
OK
redis-primary:6379> multi
OK
redis-primary:6379> set name lucy
QUEUED
redis-primary:6379> exec
(nil)
redis-primary:6379> get name
"lucy02"
redis-primary:6379>

//第二个客户端
redis-primary:6379> set name lucy02
OK
redis-primary:6379>

参考

0.redis实战
1.http://redisdoc.com/index.html
2.https://redisbook.readthedocs.io/en/latest/feature/transaction.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容