Redis五种数据类型常用命令

redis常用操作命令目录

文章目录


前言

限于公司服务器Ip原因,无法使用第三方Redis管理工具直接操作,许多命令需要直接在Xshell上来输入,在此记录一下常用的一些命令以及用途。如果本文未包含,请前往Redis官网查阅


一、String类型常用命令

1.set(设置一个键值对)

set - - 关键字
k1 - - 键
string1 - - 值

127.0.0.1:6379> set k1 string1 
OK
127.0.0.1:6379> get k1
"string"

如果再次设置键为k1,则会把值更新

127.0.0.1:6379> set k1 string1111111
OK
127.0.0.1:6379> get k1
"string1111111"
127.0.0.1:6379> 

2.setex (设置一个键值对,并且赋予过期时间)

setex - - 关键字
k1 - - 键
10 - - 时间,单位为秒
bbb - - 值
同上,如果使用set已经设置过一个key为k1的键值对,再使用setex设置一个key为k1的键值对,则会进行覆盖操作

127.0.0.1:6379> setex k1 10 bbb
OK

如果需要使用毫秒级别的时间单位,可以参考
PSETEX – 关键字
k1 - - 键
10 - - 时间,单位为秒
bbb - - 值

127.0.0.1:6379> PSETEX k1 10000 bbb
OK

3.setnx(当key不存在时才进行set)

sentnx - - 关键字
k1 - - 键
100 - - 值

127.0.0.1:6379> setnx k1 100
(integer) 1

执行上个命令后,我们已经设置了一个键为k1的键值对,如果我们再次使用sennx命令去设置一个键为k1的键值对时,则会失败。

127.0.0.1:6379> setnx k1 1000
(integer) 0

通常我们使用Redis的setnx命令来用于分布式锁的操作,例如集群中的定时任务,在多个实例同时执行同一个定时任务时,使用setnx命令来保证多个实例中只有一个定时任务的执行。

4.getset(如果不存在key,则返回为空,如果存在,将旧值返回,新值替换)

getset - - 关键字
k1 - - 键
newValue - - 新值
键为k1的值原为oldValue,通过getset命令设置值为newValue,返回旧值oldValue,并且oldValue就被替换为了newValue。

127.0.0.1:6379> get k1
"oldValue"
127.0.0.1:6379> getset k1 newValue
"oldValue"
127.0.0.1:6379> get k1
"newValue"

此时,删除键k1,通过get命令,拿到了一个null,如果再次通过getset命令设置k1,则返回一个null,并且把值设置进去。也就是说,通过getset命令设置key,无则返回null,并设置新值。有则返回旧值,并设置新值。

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> getset k1 a
(nil)
127.0.0.1:6379> get k1
"a"

在我们的项目中暂时未用到此命令,但我觉得有用,便记录一下。

二、List类型常用命令

1.rpush(从右边尾部向列表中PUSH值)

rpush - - 关键字
list1 - - 键
0 - - value
rpush关键字的中的r代表right(右边),向数组的最右边添加元组,数组的最右边便是数组的尾部。
同理还有关键字lpush,l代表(左边),向数组的最左边添加元组,数组的最左边便是数组的头部。

127.0.0.1:6379> rpush list1 0
(integer) 1
127.0.0.1:6379> rpush list1 1
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> rpush list1 2
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
127.0.0.1:6379> 

Redis中的list数据结构和java中的ArrayList数据结构是不一样的,更像LinkdeList的数据结构。每个元素之间由一条链子维护关系,这样新增元素,对其他元素的影响较小。本人表达能力有限,对此不太明白的同学可以看一下ArrayList和LinkdeList数据结构的差异。

2.lrange(范围获取list元素,从左到右)

lrange - - 关键字
list1 - - 键
0 - - 开始下标
-1 - - 结束下标(如果需要便利整个数组的话,结束下标可以使用-1,当然如果你的数组长度可能有几十万的话,你可以先使用llen key命令看一下数组长度,再然后决定结束下标)

127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"

3.lindex(根据下标获取元素)

lindex - - 关键字
list1 - - 键
0 - - 代表下标(或者叫索引、个人叫法不同。)

127.0.0.1:6379> lindex list1 0
"0"

如果你去取一个不存在的下表位置的元素,则会返回一个null

127.0.0.1:6379> lindex list1 1000
(nil)

我们项目中用此命令不多,为了日后方便查阅,在此记录一下。

4.lpop(取出最左元素,并且删除)

lpop - - 关键字
list1 - - 键
list1数组有元素 [0,1,2 ] 使用lpop命令从最左边取出两次,便是把0,1取了出来,还剩下一个 [2] 。
lpop中的l代表的是左边(left),同理还有rpop,从最右边取出元素,并且删除。
如果使用rpop则最先取出的是2。

127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
127.0.0.1:6379> lpop list1
"0"
127.0.0.1:6379> lpop list1
"1"
127.0.0.1:6379> lrange list1 0 -1
1) "2"

5.llen(获取一个list的长度)

llen - - 关键字
list1 - -值
获取一个数组的长度,这时候你可以配合小标题2的 lrange 命令来查询数组元素了。

127.0.0.1:6379> llen list1
(integer) 3

6.LREM(从头部开始,删除指定的value)

lrem - - 关键字
list1 - - 键
1 - - 删除指定value的个数,0则代表全部
2 - - 指定的value
list1元素为[0,1,2,2,2]
使用lrem命令删除了1个值为2的元素
那么list1中的元素则是[0,1,2,2]

127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
4) "2"
5) "2"
127.0.0.1:6379> lrem list1 1 2
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
4) "2"

这个命令项目中也没用到,在此记录一下。

7.lset(更新指定下标元素的值)

lset - - 关键字
list1 - - 键
3 - - 下标
3 - - 新的value

127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
4) "2"
127.0.0.1:6379> lset list1 3 3
OK
127.0.0.1:6379> lrange list1 0 -1
1) "0"
2) "1"
3) "2"
4) "3"

8.blpop(阻塞取出最左元素,并且删除)

blpop - - 关键字
list1 - - 键
3000 - - 秒,阻塞/等待的时间

1.开启一个blpop阻塞弹出

监听list1集合,现在list1中无任何元素,该线程则等待3000秒。
在此时间范围内,list1中若有元素,则取出,并且移除。
在此时间范围内,list1中仍未被push任何元素,则停止等待。

127.0.0.1:6379> blpop list1 3000

2.向list1集合中rpush一个元素

127.0.0.1:6379> rpush list1 00000000000
(integer) 1

3.blpop弹出元素

1)代表是的list1这个键
2)则代表取出来的元素
(340.06s)代表等待的时间

127.0.0.1:6379> blpop list1 3000
1) "list1"
2) "00000000000"
(340.06s)

在一般项目中,rpush和blpop是经常组合使用的。
例如一个场景:
redis中的list1中存的是id集合,现有元素 [777,888,999];
go的项目,使用rpush命令向redis中的list1数组最右边放了一个用户id > ‘1000’,
那么现在list1中的元素就是 [777,888,999,1000]。
java的项目监听list1队列,使用blpop的特性,便能依次拿到777,888,999…做后续的业务处理。
rpush和lpop组合起来便是队列的结构,先进先出,后进后出。
当然,你也可以反着来,使用lpush和brpop。

三、Set

1.sadd(向set集合中添加一个元素,并且不可重复,如果重复,则添加失败)

sadd - - 关键字
set1 - - 键
abc - - 值

1.第一步,向set1集合中添加"abc"元素

(integer) 1 代表添加成功

127.0.0.1:6379> sadd set1 abc
(integer) 1

2.第二步,向set1集合中再次添加"abc"

(integer) 0 代表添加失败,因为set1中已经存在"abc"这个元素

127.0.0.1:6379> sadd set1 abc
(integer) 0

3.第三步查看set1集合中的元素

通过smembers命令可以看到,set1集合中只有一个元素 “abc”

127.0.0.1:6379> smembers set1
1) "abc"

2.sismember(查看元素在set集合中是否存在)

sismember - - 关键字
set1 - - 键
aaa|qeqweqwewq - - 元素的值

127.0.0.1:6379> sismember set1 aaa
(integer) 1
127.0.0.1:6379> sismember set1 qeqweqwewq
(integer) 0

3.scard(查看集合中元素个数)

scard - - 关键字
set1 - - 键

127.0.0.1:6379> scard set1
(integer) 4

4.srem(移除集合中某个元素)

srem - - 关键字
set1 - - 键
000 - - 值

127.0.0.1:6379> smembers set1
1) "bbb"
2) "ddd"
3) "ccc"
4) "aaa"
5) "000"
127.0.0.1:6379> srem set1 000
(integer) 1
127.0.0.1:6379> smembers set1
1) "ddd"
2) "ccc"
3) "aaa"
4) "bbb"

5.srandmember(随机获取set集合中的N个元素)

srandmember - - 关键字
set1 - - 键
2- - 随机获取元素的个数,如果为空,默认返回1个

127.0.0.1:6379> srandmember set1 2
1) "bbb"
2) "aaa"
127.0.0.1:6379> srandmember set1 2
1) "bbb"
2) "ddd"

6.spop(随机删除set集合中的n个元素)

spop - - 关键字
set1 - - 键
1 - - 随机删除元素的个数,如果为空,默认返回1个

127.0.0.1:6379> smembers set1
1) "bbb"
2) "ddd"
3) "aaa"
4) "fff"
5) "ggg"
6) "eee"
7) "ccc"
127.0.0.1:6379> spop set1 1
1) "bbb"
127.0.0.1:6379> smembers set1
1) "ddd"
2) "aaa"
3) "fff"
4) "ggg"
5) "eee"
6) "ccc"

7.此外set集合还有取交集、并集、差集等命令

可用于共同好友,共同关注等业务,但本人项目中并未用到,在此暂不记录。

四、Hash

1.hset(新增一个hash类型的键值对)

hset - - 关键字
hash1 - - 键,可以理解为大key
user - - 小key
aaa - - 值
如果设置同样的大key 和 小 key,值将会被覆盖

127.0.0.1:6379> hset hash1 user aaa
(integer) 1
127.0.0.1:6379> hget hash1 user
"aaa"

2.hexists(查看hash中某一个小key是否存在)

hkeys - - 关键字
hash1 - - 键,可以理解为大key
user1 - - 字段,本人习惯称为小key

127.0.0.1:6379> hexists hash1 user1
(integer) 1
127.0.0.1:6379> 

3.hget(获取某一个大key中某一个小key的值)

hget - - 关键字
hash1 - - 键,可以理解为大key
user1 - - 字段,本人习惯称为小key

127.0.0.1:6379> hget hash1 user1
"aaa"

4.hgetall(获取一个大key中所有小key下的值)

hgetall - - 关键字
hash1 - - 大key

127.0.0.1:6379> hgetall hash1
1) "user1"
2) "aaa"
3) "user2"
4) "bbb"
5) "user3"
6) "ccc"
7) "user4"
8) "ddd"

5.hkeys(获取大key下的所有小key列表)

hkeys - - 关键字
hash1 - - 大key

127.0.0.1:6379> hkeys hash1
1) "user1"
2) "user2"
3) "user3"
4) "user4"

6.hlen(获取大key下的所有小key长度)

hlen - - 关键字
hash1 - - 大key

127.0.0.1:6379> hlen hash1
(integer) 4

7.hvals(获取大key下所有小key的值)

hvals - - 关键字
hash1 - - 大key

127.0.0.1:6379> hvals hash1
1) "aaa"
2) "bbb"
3) "ccc"
4) "ddd"

8.hdel(删除某大key下的某小key)

hdel- - 关键字
hash1 - - 大key
user4 - - 小key

127.0.0.1:6379> hkeys hash1
1) "user1"
2) "user2"
3) "user3"
4) "user4"
127.0.0.1:6379> hdel hash1 user4
(integer) 1
127.0.0.1:6379> hkeys hash1
1) "user1"
2) "user2"
3) "user3"

9.其他对值进行操作的命令不是很常用, 在此不记录

五、Zset

1.zadd(向zset中添加一个元素)

zadd- - 关键字
zset1 - - 键
80 - - 分数
lisi - - 成员

127.0.0.1:6379> zadd zset1 80 lisi
(integer) 1

2.zcard(查看集合元素个数)

zcard - - 关键字
zset1 - - 键

127.0.0.1:6379> zcard zset1
(integer) 3

3.zcount(计算集合分数范围内的数量)

zcount - - 关键字
zset1 - - 键
90 - - 最小分数
120 - - 最大分数

127.0.0.1:6379> zcount zset1 90 120
(integer) 2

4.zscore(查询集合中成员的分值)

zscore - - 关键字
zset1 - - 键
lisi - - 成员

127.0.0.1:6379> zscore zset1 lisi
"80"

5.zrank(获取成员在集合中的索引,从小到大排序)

zrank - - 关键字
zset1 - - 键
lisi - - 成员

127.0.0.1:6379> zrank zset1 lisi
(integer) 0

6.zrange(范围获取成员,从小到大)

zrange - - 关键字
zset1 - - 键
0 - - 开始索引
-1 - - 结束索引,-1代表所有

127.0.0.1:6379> zrange zset1 0 -1
1) "lisi"
2) "wangwu"
3) "zhangsan"

7.zrangebyscore(根据分数范围查询成员,升序)

zrangebyscore - - 关键字
zset1 - - 键
-inf - - 开始分值,-inf代表无穷小
+inf - - 结束分值,+inf代表无穷大
withscores - - 如果加上此关键字,显示的结果则会携带分数

zrangebyscore zset1 -inf +inf withscores
1) "zhangsan"
2) "100"
3) "lisi22"
4) "120"

8.zrem(删除集合中某一个元素)

zrem - - 关键字
zset1 - - 键
niubi - - 成员

127.0.0.1:6379> zrange zset1 0 -1 
1) "lisi"
2) "wangwu"
3) "zhangsan"
4) "lisi22"
5) "niubi"
127.0.0.1:6379> zrem zset1 niubi
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 
1) "lisi"
2) "wangwu"
3) "zhangsan"
4) "lisi22"

9.zremrangebysocre(移除指定范围分数的成员)

zremrangebyscore - - 关键字
zset1 - - 键
101 - - 开始分数,包含101这个分数

127.0.0.1:6379> zrangebyscore zset1 -inf +inf withscores
 1) "lisi"
 2) "80"
 3) "wangwu"
 4) "90"
 5) "zhangsan"
 6) "100"
 7) "jia"
 8) "110"
 9) "yi"
10) "110"
11) "bing"
12) "120"
13) "ding"
14) "130"
127.0.0.1:6379> zremrangebyscore zset1 101 +inf
(integer) 4
127.0.0.1:6379> zrangebyscore zset1 -inf +inf withscores
1) "lisi"
2) "80"
3) "wangwu"
4) "90"
5) "zhangsan"
6) "100"

10.zrevrangebyscore(根据分数范围查询,倒叙)

zrevrangebyscore - - 关键字
zset1 - - 键
1000 - - 结束分数,包含1000这个分数
101 - - 开始分数,包含101这个分数
withscores - - 加上这个关键字后则显示成员分数

127.0.0.1:6379> zrevrangebyscore zset1 1000 101 withscores
1) "asd000"
2) "103"
3) "asd0"
4) "102"
5) "asd"
6) "101"

11.zrevrank(倒叙获取成员在集合中的排名)

zrevrank- - 关键字
zset1 - - 键
asd01100 - - 成员名

127.0.0.1:6379> zrangebyscore zset1 -inf +inf withscores
 1) "asd0jkl1100"
 2) "8"
 3) "zhaoliu"
 4) "80"
 5) "wangwu"
 6) "90"
 7) "lisi"
 8) "100"
 9) "asd"
10) "101"
11) "asd0"
12) "102"
13) "asd000"
14) "103"
15) "asd01100"
16) "108"
127.0.0.1:6379> zrevrank zset1 asd01100
(integer) 0
127.0.0.1:6379> zrevrank zset1 asd000
(integer) 1

11.zset交际并集等命令本人不常用,在此不做记录


总结

以上是本人项目中常用到的命令,可以在RedisTemplate的API中自行对照。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值