Redis 基本类型之 String 类型
基础指令
127.0.0.1:6379> set key1 v1 # 设置 key1
OK
127.0.0.1:6379> get key1 # 取 key1
"v1"
127.0.0.1:6379> keys * # 查看所有的 key
1) "key1"
127.0.0.1:6379> exists key1 # 查看 key1 是否存在
(integer) 1
127.0.0.1:6379> append key1 hello # 给 key1 追加字符串,如果 key 不存在,就相当于 set 一个 key
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> append key1 ,iron
(integer) 12
127.0.0.1:6379> strlen key1 # 查看字符串长度
(integer) 12
127.0.0.1:6379> get key1
"v1hello,iron"
################################################################################################################
# incr/decr 原子性自增/原子性自减指令,可用于记录访问量等
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 对 key 自增 1,若 key 不存在,则赋值 1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> decr views # 对 key 自减 1,若 key 不存在,则赋值 -1
(integer) 1
127.0.0.1:6379> incrby views 10 # 跨步长自增
(integer) 11
127.0.0.1:6379> decrby views 10 # 跨步长自减
(integer) 1
################################################################################################################
# 字符串范围 range
127.0.0.1:6379> set key1 hello,iron
OK
127.0.0.1:6379> get key1
"hello,iron"
127.0.0.1:6379> getrange key1 0 3 # 获取 key1 字符串子串[0,3]
"hell"
127.0.0.1:6379> getrange key1 0 -1 # 获取 key1 全部字符串
"hello,iron"
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 2 xxx # 替换指定位置开始的字符串,从下标 2 开始
(integer) 7
127.0.0.1:6379> get key2
"abxxxfg"
################################################################################################################
# setex (set with expire) # 设置过期时间
# setnx (set if not exist) # 若 key 不存在则设置(在分布式锁中会常用)
127.0.0.1:6379> setex key 10 abc # 设置 key 的过期时间为 10 秒
OK
127.0.0.1:6379> ttl key
(integer) 6
127.0.0.1:6379> ttl key
(integer) -2
127.0.0.1:6379> setnx key redis # 设置成功返回 1
(integer) 1
127.0.0.1:6379> setnx key mongo # 设置失败返回 0
(integer) 0
127.0.0.1:6379> get key
"redis"
################################################################################################################
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # mset 批量设置字符串
OK
127.0.0.1:6379> mget k1 k2 k3 # mget 批量获取字符串
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # 原子化操作,当且仅当所有 key 都不存在时才可以设置值,全部成功或全部失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
################################################################################################################
# 涉及到对象的一个巧妙操作
# 创建对象
set user:1 {name:zhangsan,age:10} # 设计一个 user:1 对象,value 为一个 json 对象
# 巧妙的创建方式: user:{id}:{field}
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 10
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "10"
################################################################################################################
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"
String 的常用使用场景
- 计数器
- 统计多单位的数量,也就是“巧妙操作”
- 粉丝数
- 对象缓存存储