字符串相关
set
给key设置一个value,设置时可以加一些功能参数,如果:过期时间,存在设置,不存在设置等。
- 格式:set key value [EX 秒|PX 毫秒][XX|NX][GET]
- EX seconds – 设置键key的过期时间,单位时秒
- PX milliseconds – 设置键key的过期时间,单位时毫秒
- NX – 只有键key不存在的时候才会设置key的值
- XX – 只有键key存在的时候才会设置key的值
- GET - 获取设置的值
- 版本:since 1.0
- 时间复杂的:O(N)
# 当不存在一个akay时为akay设置值12345
127.0.0.1:6379> set akey 12345 ex 10 nx
OK
127.0.0.1:6379> get akey
"12345"
# 当存在kay是kkk时,设置kkk的value为12345
127.0.0.1:6379> set kkk 12345 ex 60 xx
(nil) # fail
127.0.0.1:6379> set kkk 11
OK
127.0.0.1:6379> set kkk 12345 ex 60 xx
OK # success
setex
设置一个key并设置过期时间。等效于以下两个命令,两个命令的执行时原子操作。
# 等价方式1
multi
set key value
expire key expire_seconds
exec
# 等价方式2
set key value ex expire_secconds
set key value px millsecconds
- 格式:setex key expire_seconds value
- 版本:since 2.0
mset
一次设置多个key的value。
- 格式: mset key1 value1 key2 value2 ...
- 版本:since 1.0.1
- 时间复杂度:O(N)
msetnx
设置多个key value,当key任何一个key都不存在时。
- 格式:msetnx key1 value1 key2 value2 ...
- 版本:since 1.0.1
- 返回值:
- 1 - 所有的key都被设置了值
- 0 - 都没设置值
get
获取一个key的值。
- 格式:get key
- 版本:since 1.0.0
- 时间复杂度:O(1)
- 返回值:key的value 或 nil
getset
设置一个值,并获取之前设置的值。
mget
一次获取多个值。当值不存在时返回nil。
- 格式:mget key1 key2
- 版本:1.0
- 时间复杂度:O(N)
append
向redis中的key追加内容,如果key不存在会先创建长度为0的key,然后向其中追加字符。
- 格式:append key value
- 返回:整数,标识字符串长度
- 版本:since 2.0.0
127.0.0.1:6379> EXISTS kkk
(integer) 0
127.0.0.1:6379> append kkk 123456
(integer) 6
127.0.0.1:6379> get kkk
"123456"
127.0.0.1:6379> append kkk 789
(integer) 9
127.0.0.1:6379> get kkk
"123456789"
strlen
获取字符串的长度。
- 格式:strlen key
- 返回:整数,表示字符串的长度
- 时间复杂度:O(1)
incr/decr
当字符串的模式是数字,对字符串原子加1.
当字符串的模式是数字,对字符串原子减1.
- 格式: incr/decr key
- 时间复杂度:O(1)
- 返回值:自增/递减后的值
127.0.0.1:6379> set key "100"
OK
127.0.0.1:6379> incr key
(integer) 101
127.0.0.1:6379> decr key
(integer) 100
incrby/decrby
字符串模式是数字,原子增加或减少一个数。
- 格式:
- incrby key number
- decrby key number
- 版本:1.0.0
- 时间复杂度:O(1)
- 返回值:增加/减少的值
bgsave
后台保存DB。redis会fork一个子进程dump内存数据,然后立即返回OK状态码。
- 版本: since 1.0.0
bitcount
统计字符串被设置为1的bit数。一般整个字符串都会被技术,通过start、end可以指定范围。
- 格式:bitcount key [start end]
- 版本:since 2.6
- 时间复杂度:O(N)
127.0.0.1:6379> set lqc A
OK
127.0.0.1:6379> BITCOUNT lqc
(integer) 2
A 的二进制 1000001
,二进制位数为2.
配合setbit
命令可以实现bitmap,可以用来统计次数。例如统计用户在线天数,以用户名为key,偏移记天数,setbit lqc 1; setbit lqc 2;set bit lqc 4; bitcount lqc
。因为使用bit存储,空间利用率很高。
bitfield
这个命令会把redis字符串当作位数组,并能够对变长位和任意位字节对齐的指定整型位域进行寻址。和任意未字节对齐的指定整型位域进行寻址。
List操作
lpush/rpush
从队列左边/右边插入一个或多个元素。
- 格式:lpush queue_key key1 key2...
- 返回值:整肃,队列的长度
- 时间复杂度:O(1)
lpushx/rpushx
只有当 key 已经存在并且存着一个 list 的时候,在这个 key 下面的 list 的头部插入 value。
lpop/rpop
从list的左边/右边出队一个元素。
- 格式: lpop key
- 返回值:出队元素/nil
blpop/brpop
带阻塞行为的出队操作,一次可以取多个list的元素,当list为空操作被阻塞。
一次取多个key时,会弹出第一非空list的元素,并与key一起返回客户端。
- 格式:blpop key1 [key2] timeout
- timeout - 超时时间,秒
- 返回值:
# 获取空list
127.0.0.1:6379> del key1 key2
(integer) 2
127.0.0.1:6379> BLPOP key1 key2 3
(nil)
(3.05s)
# 获取非空list
127.0.0.1:6379> rpush key1 1 2 3
(integer) 3
127.0.0.1:6379> rpush key2 1 2 3
(integer) 3
127.0.0.1:6379> BLPOP key1 key2 3
1) "key1"
2) "1"
评论区