redis 数据类型 String

1 基本命令

  • 拼接
127.0.0.1:6379> set say hello	# 设置 key - value
OK
127.0.0.1:6379> get say	# 获取 value
"hello"
127.0.0.1:6379>  exists say	# 判断 key 是否存在
(integer) 1
127.0.0.1:6379> append say ",I'm Jay"	# 追加
(integer) 13
127.0.0.1:6379> get say
"hello,I'm Jay"
  • 查看长度
127.0.0.1:6379> strlen say	# 获取 key 的 value 长度
(integer) 13
  • 截取
127.0.0.1:6379> GETRANGE say 0 5	# 截取 key 的 value 下标 [0, 5] 范围的字符串
"hello,"
127.0.0.1:6379> GETRANGE say 0 -1	# 截取 key 的全部 value
"hello,I’m Jay"
  • 替换
127.0.0.1:6379> SETRANGE say 10 LiSha	# 替换指定位置开始的字符串
(integer) 15
127.0.0.1:6379> get say
"hello,I'm LiSha"
  • 判断 key 是否存在,不存在则设置
127.0.0.1:6379> SETEX num1 60 "hello"	# 设置 key 60 秒过期
OK
127.0.0.1:6379> ttl num1	# 查看 key 剩余时间
(integer) 50
127.0.0.1:6379> SETNX num1 "hi"	# 判断 key 是否存在,不存在则设置 key 值
(integer) 0	# 表示存在,设置失败
127.0.0.1:6379> ttl num1	
(integer) -2	# 表示已经过期
127.0.0.1:6379> SETNX num1 "hi"
(integer) 1
127.0.0.1:6379> get num1
"hi"
  • 同时设置多个 key - value
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3	# 设置多个 key - value
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> MGET k1 k2 k3	# 获取多个 key 的 value
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 n1 k4 v4	# 判断 key 是否存在,不存在则同时设置多个 key - value(原子性操作,要么一起成功,要么一起失败)
(integer) 0
127.0.0.1:6379> get k4
(nil)
  • 设置对象
127.0.0.1:6379> mset user1:name zhangsan user1:age 18	# 设置一个 user1 对象,值为 JSON 字符串来保存一个对象
OK
127.0.0.1:6379> MGET user1:name user1:age
1) "zhangsan"
2) "18"
  • 先 get 后 set
127.0.0.1:6379> getset db redis	# 如果不存在,则返回(nil),之后再设置值
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb	# 如果存在,则返回当前值,之后再替换
"redis"
127.0.0.1:6379> get db
"mongodb"
  • 步长,相当于 i++ 或 i +=
127.0.0.1:6379> set count 1
OK
127.0.0.1:6379> get count
"1"
127.0.0.1:6379> incr count	# 自增 1
(integer) 2
127.0.0.1:6379> incr count
(integer) 3
127.0.0.1:6379> decr count	# 自减 1
(integer) 2
127.0.0.1:6379> incrby count 10	# 自增 10
(integer) 12
127.0.0.1:6379> decrby count 5	# 自减 5
(integer) 7

2 使用场景

  • 计数器
      String 类型的 incr 和 decr 命令的作用是将 key 中储存的数字值加一/减一,这两个操作具有原子性,总能安全地进行加减操作,因此可以用 String 类型进行计数,如微博的评论数、点赞数、分享数,抖音作品的收藏数,京东商品的销售量、评价数等。
  • 分布式锁
      String 类型的 setnx 的作用是“当 key 不存在时,设值并返回 1,当 key 已经存在时,不设值并返回 0”,“判断 key 是否存在”和“设值”两个操作是原子性地执行的,因此可以用 String 类型作为分布式锁,返回 1 表示获得锁,返回 0 表示没有获得锁。例如,为了保证定时任务的高可用,往往会同时部署多个具备相同定时任务的服务,但是业务上只希望其中的某一台服务执行定时任务,当定时任务的时间点触发时,多个服务同时竞争一个分布式锁,获取到锁的执行定时任务,没获取到的放弃执行定时任务。定时任务执行完时通过 de l命令删除 key 即释放锁,如果担心 del 命令操作失败而导致锁一直未释放,可以通过 expire 命令给锁设置一个合理的自动过期时间,确保即使 del 命令失败,锁也能被释放。不过 expire 命令同样存在失败的可能性,如果你用的是 Java 语言,建议使用 JedisCommands 接口提供的 String set(String key, String value, String nxxx, String expx, long time)方法,这个方法可以将 setnx 和 expire 原子性地执行,具体使用方式如下(相信其它语言的 Redis 客户端也应当提供了类似的方法)
  • 存储对象
      利用 JSON 强大的兼容性、可读性和易用性,将对象转换为 JSON 字符串,再存储在 String 类型中,是个不错的选择,如用户信息、商品信息等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值