Redis之String类型

文章目录

  • Redis之String类型
  • 1. 赋值/获取值
  • 2. 同时设置/获取多个键值
  • 3. 数值增减
  • 4. 获取字符串长度
  • 5. 向尾部追加值
  • 6. 分布式锁
  • 7.应用场景

Redis之String类型

Redis之String类型_第1张图片
Redis命令不区分大小写

1. 赋值/获取值

赋值:set key value
取值:get key (当键不存在时候,会返回空结果)

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

2. 同时设置/获取多个键值

MSET/MGET

127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> mset k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> mget k2 k3 k4
1) "v2"
2) "v3"
3) "v4"
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> mget k2 k3 k4 k5
1) "v2"
2) "v3"
3) "v4"
4) (nil)

3. 数值增减

  • 递增数值:INCR key
  • 增加指定的整数:INCRBY key increment
  • 递减数值:DECR key
  • 减少指定的整数:DECRBY key decrement
127.0.0.1:6379> incr user:1:article:01
(integer) 1
127.0.0.1:6379> incr user:1:article:01
(integer) 2
127.0.0.1:6379> incr user:1:article:01
(integer) 3
127.0.0.1:6379> get user:1:article:01
"3"
127.0.0.1:6379> decr user:1:article:01
(integer) 2
127.0.0.1:6379> get user:1:article:01
"2"
127.0.0.1:6379> incrby user:1:article:01 20
(integer) 22
127.0.0.1:6379> get user:1:article:01
"22"
127.0.0.1:6379> decrby user:1:article:01 10
(integer) 12
127.0.0.1:6379> get user:1:article:01
"12"

4. 获取字符串长度

STRLEN key
不存在的key返回0

127.0.0.1:6379> get user:1:article:01
"12"
127.0.0.1:6379> strlen user:1:article:01
(integer) 2
127.0.0.1:6379> strlen k1
(integer) 2
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> strlen name
(integer) 8
127.0.0.1:6379> strlen hh
(integer) 0

5. 向尾部追加值

APPEND key value
当不存在key时,相当于新建了个key并把后面的值赋给这个key

127.0.0.1:6379> set say hello
OK
127.0.0.1:6379> get say
"hello"
127.0.0.1:6379> append say world
(integer) 10
127.0.0.1:6379> get say
"helloworld"
127.0.0.1:6379> append aaa hhh
(integer) 3
127.0.0.1:6379> get aaa
"hhh"

6. 分布式锁

set key value [EX seconds] [PX milliseconds] [NX|XX]

  • EX: key在多少秒之后过期
  • PX: key在多少毫秒之后过期
  • NX: 当key不存在的时候,才创建key, 效果等同于setnx
  • XX: 当key存在的时候,覆盖key
127.0.0.1:6379> set stock 10 ex 10
OK
127.0.0.1:6379> get stock
"10"
127.0.0.1:6379> ttl stock
(integer) 1
127.0.0.1:6379> get stock
(nil)
127.0.0.1:6379> get stock
(nil)
127.0.0.1:6379> set stock 10 ex 20 nx
OK
127.0.0.1:6379> get stock
"10"
127.0.0.1:6379> ttl stock
(integer) 12
127.0.0.1:6379> ttl stock
(integer) -2
127.0.0.1:6379> get stock
(nil)
127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> setnx k1 vv1
(integer) 0
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> setnx a1 vv1
(integer) 1
127.0.0.1:6379> get a1
"vv1"

7.应用场景

  • 商品编号,订单编号,项目编号使用INCR生成

商品编号,订单编号,项目编号等里面除了对应位数上符合业务逻辑的规则,还会多余出几位让自增产生,这个自增如果每次去查上次生成最大的编号,然后再取到再自增,性能会比较低,所以一般会把自增这几位放在redis中,使用INCR命令来实现,最后和别的符合业务规则的位拼接而成新的编号。XASDWEBX001,XASDWEBX002…

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
  • 公司内网发文的文章,统计被员工阅读次数

每个员工打开文章01时候就执行 incr article:01,然后显示阅读次数是执行get article:01

127.0.0.1:6379> incr article:01
(integer) 1
127.0.0.1:6379> get article:01
"1"
127.0.0.1:6379> incr article:01
(integer) 2
127.0.0.1:6379> incr article:01
(integer) 3
127.0.0.1:6379> incr article:01
(integer) 4
127.0.0.1:6379> get article:01
"4"

你可能感兴趣的:(redis,redis,数据库,缓存)