2.5字符串

结构和命令 快速实战 内部编码 查缺补漏

字符串键值结构

key的类型是String,但value的类型可以是String,int,二进制

注意:value 大小不能大于512M,建议key-value 大小最好 100k以内

场景

  • 缓存

  • 计数器

  • 分布式锁

  • 等等

常用命令

命令

说明

时间复杂度

get

获取key对应的value

O(1)

set

设置key-value

O(1)

del

删除key-value

O(1)

演示

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

自增/减命令

命令

说明

时间复杂度

incr

自增1,若key不存在,自动创建key-value,get(key)=1

O(1)

decr

自减1,若key不存在,自动创建key-value,get(key)=-1

O(1)

incrby key k

自增k,若key不存在,自动创建key-value,get(key)=k

O(1)

decrby key k

自减k,若key不存在,自动创建key-value,get(key)=-k

O(1)

incrbyfloat key 3.5

自增3.5

O(1)

演示

127.0.0.1:6379> get counter
(nil)
127.0.0.1:6379> incr counter
(integer) 1
127.0.0.1:6379> get counter
"1"
127.0.0.1:6379> incrby counter 99
(integer) 100
127.0.0.1:6379> decr counter
(integer) 99
127.0.0.1:6379> get counter
"99"
127.0.0.1:6379> incrbyfloat counter 1.1
"100.1"
127.0.0.1:6379> get counter
"100.1"

使用场景

  • 记录网站访问量

  • 缓存视频的基本信息(数据源在MySQL中)

  • 分布式id生成器

设值命令

命令

说明

时间复杂度

set key value

不管key是否存在,都设置

O(1)

setnx key value

key不存在,才设置,可以理解为新增add操作

O(1)

set key value xx

key存在,才设置,可以理解为更新操作

O(1)

set key value ex

设置key-value的同时,设置超时时间

O(1)

getset key newvalue

set key newvalue并返回旧的value

O(1)

演示

批量命令

命令

说明

时间复杂度

mget key1 key2 key3 ...

批量获取key,是原子操作

O(n)

mset key1 value1 key2 value2 key3 value3 ...

批量设置key-value

O(n)

演示

字符串操作命令

命令

说明

时间复杂度

append key value

将value追加到旧的value

O(1)

strlen key

返回字符串的长度(注意中文)

O(1)

getrange key start end

获取字符串指定下标的所有值

O(1)

setrange key index value

设置指定下标的所有对应的值

O(1)

演示

  127.0.0.1:6379> set hello world
  OK
  127.0.0.1:6379> getset hello php
  "world"
  127.0.0.1:6379> append hello ,java
  (integer) 8
  127.0.0.1:6379> get hello
  "php,java"
  127.0.0.1:6379> strlen hello
  (integer) 8

  127.0.0.1:6379> set hello "足球"
  OK
  127.0.0.1:6379> get hello
  "\xe8\xb6\xb3\xe7\x90\x83"
  127.0.0.1:6379> strlen hello
  (integer) 6
  127.0.0.1:6379> set hello javabest
  OK
  127.0.0.1:6379> getrange hello 0 3
  "java"
  127.0.0.1:6379> setrange hello 4 p
  (integer) 8
  127.0.0.1:6379> get hello
  "javapest"

Last updated

Was this helpful?