redis命令之string类型操作命令

目录

1、set命令

2、批量添加/查询命令

3、获取/修改指定范围内的值

4、数值增减(一定要数字才能进行加减)

5、获取字符串长度和内容追加

6、部分过时命令(虽过时,但也可以使用)

7、String类型使用案例


1、set命令

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

        set命令有8个可选参数:ex、px、nx、xx、keepttl、exat、pxat,中括号包裹在一起的可选参数不能同时出现,下面单独提出每一个可选参数的作用并举例说明:

        (1)ex seconds:以为单位设置过期时间

127.0.0.1:6379> set k1 v1 ex 10
OK
127.0.0.1:6379> ttl k1
(integer) 7

                 在插入k1键值对时,设置其过期时间为10秒。

        (2)px milliseconds:以毫秒为单位设置过期时间

127.0.0.1:6379> set k1 v1 px 10000
OK
127.0.0.1:6379> ttl k1
(integer) 2

                 在插入k1键值对时,设置其过期时间为10000毫秒,即10秒。

        (3)exat timestamp:设置以为单位的UNIX时间戳所对应的时间为过期时间

                UNIX时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。UNIX时间戳可用java代码获取,这里在获取当前的时间戳基础上增加15秒,用于测试。

//获取当前UNIX时间戳(秒)
System.out.println(System.currentTimeMillis()/1000L + 15L);
127.0.0.1:6379> set k1 v1 exat 1680833700
OK
127.0.0.1:6379> ttl k1
(integer) 4
127.0.0.1:6379> ttl k1
(integer) -2

        (4)pxat milliseconds-timestamp:设置毫秒为单位的UNIX时间戳所对应的时间为过期时间

                 在获取当前毫秒值时添加15000毫秒,用于测试。

//获取UNIX时间戳(毫秒)
System.out.println(System.currentTimeMillis() + 15000L);
127.0.0.1:6379> set k1 v1 pxat 1680834152064
OK
127.0.0.1:6379> ttl k1
(integer) 4

        (5)nx:键不存在的时候设置键值

127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> set k1 v1 nx
(nil)
127.0.0.1:6379> set k2 v2 nx
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"

                 数据库中存在k1时,使用set命令带上nx参数,再次创建k1失败,创建k2时成功。

        (6)xx:键存在的时候设置键值(覆盖)

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> set k1 vv1 xx
OK
127.0.0.1:6379> get k1
"vv1"
127.0.0.1:6379> set k3 vv1 xx
(nil)
127.0.0.1:6379> keys *
1) "k2"
2) "k1"

                 获取数据库k1键对应的值,使用带xx参数的set命令修改键为k1对应的值v1为vv1,发现修改成功。插入数据库没有的键k3时失败。

        (7)keepttl:保留设置前已指定的键的生存时间

127.0.0.1:6379> set k1 v1 ex 20
OK
127.0.0.1:6379> ttl k1
(integer) 18
127.0.0.1:6379> set k1 vv1 keepttl
OK
127.0.0.1:6379> ttl k1
(integer) 12
127.0.0.1:6379> get k1
"vv1"

                 设置键值对 k1 v1 的过期时间为20s,之后带上 keepttl 参数再次设置 k1 修改值 v1 为vv1,发现过期倒计时仍在继续,值已经修改为vv1。

        (8)get:返回指定键原本的值,若键不存在则返回nil

127.0.0.1:6379> keys *
1) "k2"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> set k2 vv2 get
"v2"
127.0.0.1:6379> get k2
"vv2"
127.0.0.1:6379> set k1 v1 get
(nil)
127.0.0.1:6379> get k1
"v1"

                查看数据库存在的键,使用 set 命令带上 get 参数修改 k2 的值 v2 为 vv2,返回原来的值 v2,再次查询 k2 发现修改成功。使用同样的方法,设置不存在的 k1 键值对,值为 v1,返回 nil,查询 k1 发现设置成功。

2、批量添加/查询命令

        (1)mset:批量添加,可覆盖

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> get k2
"vv2"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mset k1 vv1 k2 vvvv2 k3 v3 k4 v4
OK
127.0.0.1:6379> keys *
1) "k4"
2) "k2"
3) "k3"
4) "k1"
127.0.0.1:6379> get k1
"vv1"
127.0.0.1:6379> get k2
"vvvv2"
127.0.0.1:6379> get k3
"v3"

                 查看数据库存在的键和值,使用 mset 指令批量添加,之后再次查询键,发现添加成功,查询原来存在的键 k1 和 k2 的值,发现原来的值被覆盖。

        (2)msetnx:批量添加不存在的值,不可覆盖(如果添加键存在,则全部添加失败)

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> get k1
"vv1"
127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3 k4 v4
(integer) 0
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> get k1
"vv1"
127.0.0.1:6379> msetnx k3 v3 k4 v4
(integer) 1
127.0.0.1:6379> keys *
1) "k4"
2) "k2"
3) "k3"
4) "k1"
127.0.0.1:6379> get k3
"v3"

                 先查询数据库已存在的数据,使用 msetnx 添加数据,里面包含已存在的数据,发现添加失败,添加不存在的数据,添加成功。

        (3)mget:批量查询,不存在的键返回nil

127.0.0.1:6379> keys *
1) "k4"
2) "k2"
3) "k3"
4) "k1"
127.0.0.1:6379> mget k1 k2 k3 k5
1) "vv1"
2) "vvvv2"
3) "v3"
4) (nil)

3、获取/修改指定范围内的值

         (1)getrange key start end:从指定的key中截取 start 到 end 的值,可以使用负偏移量,-1表示最后一个字符,-2表示倒数第二个字符,依此类推。

127.0.0.1:6379> set num 0123456789
OK
127.0.0.1:6379> get num
"0123456789"
127.0.0.1:6379> getrange num 2 4
"234"
127.0.0.1:6379> getrange num 2 -3
"234567"

                设置键 num,值为 0123456789,可以跟方便理解,截取下标2到4,结果为 234。负数情况,截取下标2到-3时,从右往左数第三个值为 7,所以结果为 234567。

        (2)setrange key offset value:将key的值从指定下标开始,替换为value的值,offset不能为负数

127.0.0.1:6379> get k1
"0123456789"
127.0.0.1:6379> setrange k1 2 aaaa
(integer) 10
127.0.0.1:6379> get k1
"01aaaa6789"
127.0.0.1:6379> setrange k1 8 aaaa
(integer) 12
127.0.0.1:6379> get k1
"01aaaa67aaaa"

                将k1值从第二位开始替换为 aaaa,若替换长度超过数据长度,多出的部分会补在后面。

127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> setrange k3 0 aaaa
(integer) 4
127.0.0.1:6379> get k3
"aaaa"
127.0.0.1:6379> setrange k2 2 aaaa
(integer) 6
127.0.0.1:6379> get k2
"\x00\x00aaaa"
127.0.0.1:6379> getrange k2 0 2
"\x00\x00a"

                若替换一个不存在的键,偏移量为0,则相当于执行set key value,若偏移量不为0,则缺少的位置使用 \x00 十六进制数代替,一个数占一个位置。

4、数值增减(一定要数字才能进行加减)

         (1)incr key:递增数值,返回增加后的值

127.0.0.1:6379> get k2
"5"
127.0.0.1:6379> incr k2
(integer) 6
127.0.0.1:6379> get k2
"6"

        (2)incrby key increment:按指定的整数增加,返回增加后的值

127.0.0.1:6379> get k2
"6"
127.0.0.1:6379> incrby k2 10
(integer) 16
127.0.0.1:6379> get k2
"16"

        (3)decr key:递减数值,返回减少后的值

127.0.0.1:6379> get k2
"16"
127.0.0.1:6379> decr k2
(integer) 15
127.0.0.1:6379> get k2
"15"

        (4)decrby key decrement:按指定的整数减少,返回减少后的值

127.0.0.1:6379> get k2
"15"
127.0.0.1:6379> decrby k2 11
(integer) 4
127.0.0.1:6379> get k2
"4"

5、获取字符串长度和内容追加

         (1)strlen key:获取字符串长度

127.0.0.1:6379> get k3
"aaaa"
127.0.0.1:6379> strlen k3
(integer) 4

         (2)append key value:字符串追加

127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
127.0.0.1:6379> get k3
"v3"
127.0.0.1:6379> append k3 vv3
(integer) 5
127.0.0.1:6379> get k3
"v3vv3"
127.0.0.1:6379> append k4 vv
(integer) 2
127.0.0.1:6379> get k4
"vv"

                若追加键不存在,则命令效果相当于 set key value。

6、部分过时命令(虽过时,但也可以使用)

         (1)getset key value:添加或覆盖键对应的值后返回旧值,没有旧值返回nil

                        于Redis version 6.2.0 过期,可替换命令:set key value get

        (2)setnx key value:当key不存在时添加

                        于Redis version 2.6.12 过期,可替换命令:set key value nx

        (3)setex key seconds value:添加key值的同时指定过期时间(秒)

                        于Redis version 2.6.12过期,可替换命令:set key value ex seconds

        (4)psetex key milliseconds value:psetex的工作原理与setex完全相同,唯一的区别是过期时间是以毫秒而不是秒为单位指定的。

                        于Redis version 2.6.12过期,可替换命令:set key value px milliseconds

7、String类型使用案例

        视频或文章点赞:

127.0.0.1:6379> set items:001 0
OK
127.0.0.1:6379> get items:001
"0"
127.0.0.1:6379> incr items:001
(integer) 1
127.0.0.1:6379> incr items:001
(integer) 2

        说明:建立一个商品key:items:001,其中items表示为商品类型的key,001表示商品序号,初始值设置为0,当用户点击喜欢,执行 incr 指令,将喜欢人数的统计数量加一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值