字符串

设置语法

set key value [EX seconds] [PX ms] [nx|xx]
  • key: 键名
  • value: 键值
  • ex seconds: 键秒级过期时间
  • ex ms: 键毫秒及过期时间
  • nx: 键不存在才能设置,setnx和nx选项作用一样,用于添加,分布式锁的实现
  • xx: 键存在才能设置,setxx和xx选项作用一样,用于更新

示例

创建简单的键值

127.0.0.1:6379> set gender "male" 
OK
127.0.0.1:6379> get gender
"male"

创建键值并设置10秒过期时间

通过EX参数

127.0.0.1:6379> set gender "male" EX 100
OK

通过PX参数

127.0.0.1:6379> set gender "male" PX 10000
OK
127.0.0.1:6379> ttl gender
(integer) 9

指定键不存在时创建键值

127.0.0.1:6379> set gender "male" NX
OK
127.0.0.1:6379> set gender "male1" NX
(nil)

指定键存在时创建键值

127.0.0.1:6379> set gender "male1" XX
OK
127.0.0.1:6379> get gender
"male1"

获取值的一部分(字符串切片)

127.0.0.1:6379> GET name 
"LotusChing"
127.0.0.1:6379> GETRANGE name 0 4
"Lotus"
127.0.0.1:6379> GETRANGE name 0 -1
"LotusChing"

批量获取多个键的值

127.0.0.1:6379> mget name age gender
1) "LotusChing"
2) "21"
3) "male1"

批量设置多个键值 批量设置值成功了,但是参数好像没有生效

127.0.0.1:6379> mset name "Da" EX 100 age 21 gender "male" EX 200
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> get name
"Da"
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> get gender
"male"

书中提到一个有趣的概念,批量操作可以提供效率节省时间

逐条get/set的时间消耗公式:

n次get/set时间 = n次网络时间 + n次命令时间

批量get/set的时间消耗公式: n次get/set时间 = 1次网络时间 + n次命令时间

合理的使用批量操作可以提高Redis性能,但是注意不要量太大,如果过量的话可能会导致Redis阻塞

对键追加值

127.0.0.1:6379> get name
"Da"
127.0.0.1:6379> APPEND name "Yo"
(integer) 4
127.0.0.1:6379> get name
"DaYo"

获取键值长度

127.0.0.1:6379> strlen name
(integer) 4

时间复杂度

  • set: O(1)
  • get: O(1)
  • del: O(k),k为键的个数
  • mget: O(k),k为键的个数
  • mset: O(k),k为键的个数
  • append: O(1)
  • str: O(1)
  • getrange: O(n), n为字符串的长度

内部编码

  • int: 8字节长整型
  • embstr: 小于39字节值
  • raw: 大于39字节的值

典型场景

1. 缓存

2. 共享Session

3. 限速(计数+超时)

results matching ""

    No results matching ""