REDIS 有 6 大数据结构:string,link,sortedset,sets,hash,Geo。这 6 个结构我将用 6 篇文章来记录各自是怎么用的,然后再用一篇文章来说一下各自的应用场景;
string
增
set key value [ex 秒数] / [px 毫秒数] [nx] /[xx]
set a 1 ex 10 , 10 秒有效
Set a 1 px 9000 , 9 秒有效
将 key 和 value 对应。如果 key 已经存在了,它会被覆盖,而不管它是什么类型。
注: 如果 ex,px 同时写, 以后面的有效期为准
如 set a 1 ex 100 px 9000
, 实际有效期是 9000 毫秒(9 秒)
nx: 表示 key 不存在时, 执行操作
xx: 表示 key 存在时, 执行操作
mset multi set
mset key1 v1 key2 v2 ....
一次性设置多个键值
删
删除一个 key 并返回 key 的数量
del key
# Example
redis> SET key2 "World"
OK
redis> DEL key1 key2 key3
(integer) 2
redis>
改
rename oldkey newskey
将 key 重命名为 newkey,如果 key 与 newkey 相同,将返回一个错误。如果 newkey 已经存在,则值将被覆盖。
renamenx oldkey newskey
nx -> not exits 当且仅当 newkey 不存在时,将 key 改名为 newkey。当 key 不存在时,返回一个错误。
setrange key offset value
redis 127.0.0.1:6379> set greet hello
OK
redis 127.0.0.1:6379> setrange greet 2 x
(integer) 5
redis 127.0.0.1:6379> get greet
"hexlo"
# 如果偏移量 > 字符长度, 该字符自动补 0\x00
redis 127.0.0.1:6379> setrange greet 6 !
(integer) 7
redis 127.0.0.1:6379> get greet
"heyyo\x00!"
作用: 把字符串的 offset 偏移字节, 改成 value
append key value
作用: 把 value 追加到 key 的原值上
getset key newvalue
redis 127.0.0.1:6379> set cnt 0
OK
redis 127.0.0.1:6379> getset cnt 1
"0"
redis 127.0.0.1:6379> getset cnt 2
"1"
作用: 设置新值并返回旧值
incr key
作用: 指定的 key 的值加 1, 并返回加 1 后的值
- 不存在的 key 当成 0, 再 incr 操作
- 范围为 64 有符号
incrby key number
redis 127.0.0.1:6379> incrby age 90
(integer) 92
作用: key 每次递增 number, 但仅限于整数
incrbyfloat key floatnumber
redis 127.0.0.1:6379> incrbyfloat age 3.5
"95.5"
作用: key 每次递增 floatnumber, 但仅限于整数
decr key
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379> decr age
(integer) 19
decrby key number
redis 127.0.0.1:6379> decrby age 3
(integer) 16
setbit key offset value
redis 127.0.0.1:6379> set char A
OK
redis 127.0.0.1:6379> setbit char 2 1
#大写字母转换成小写字母;
#大写字母和小写字母在 ascii 表中的区别:
A:0100 0001 a:0110 0001
B:0100 0010 b:0110 0010
差异: 在第二位 0 和 1 的差别;
作用: 设置 offset 对应二进制位上的值
返回: 该位上的旧值
注意:
1: 如果 offset 过大, 则会在中间填充 0,
2:offset 最大大到多少
3:offset 最大 2^32-1, 可推出最大的的字符串为 512M
bitop operation destkey key1 [key2 ...]
对 key1,key2..keyN 进行 operation 位元操作, 并将结果保存到 destkey 上。
operation 可以是 AND、OR、NOT、XOR 的任意一种:
- BITOP AND destkey key [key …],对一个或多个 key 求逻辑并,并将结果保存到 destkey。
- BITOP OR destkey key [key …],对一个或多个 key 求逻辑或,并将结果保存到 destkey。
- BITOP XOR destkey key [key …],对一个或多个 key 求逻辑异或,并将结果保存到 destkey。
- BITOP NOT destkey key,对给定 key 求逻辑非,并将结果保存到 destkey。
redis 127.0.0.1:6379> setbit lower 7 0 # 00000000 空字符
(integer) 0
redis 127.0.0.1:6379> setbit lower 2 1 #00100000 空格
(integer) 0
redis 127.0.0.1:6379> get lower
" "
redis 127.0.0.1:6379> set char Q
OK
redis 127.0.0.1:6379> get char #01010001
"Q"
redis 127.0.0.1:6379> bitop or char char lower #求逻辑或 #01010001 #00100000 #01110001
(integer) 1
redis 127.0.0.1:6379> get char #01110001
"q"
# 注意: 对于 NOT 操作, key 不能多个
查
GET key
返回 key 的 value。如果 key 不存在,返回特殊值 nil。如果 key 的 value 不是 string,就返回错误,因为 GET 只处理 string 类型的 values。
KEYS pattern
查找所有符合给定模式 pattern 的 key。
-
KEYS *
匹配数据库中所有 key。 -
KEYS h?llo
通配单个字符 如 hello,hallo 和 hxllo 等。 -
KEYS h*llo
通配任意多个字符(包括没有) 如 hllo 和 heeeeello 等。 -
KEYS h[ae]llo
通配括号内的某 1 个字符 如 hello 和 hallo,但不匹配 hillo。
特殊符号用 隔开。
randomkey
从当前数据库返回一个随机的 key。
type key
返回 key 所储存的值的类型。
exists key
返回 key 是否存在。如果存在返回 1, 不存在就返回 0
mget key1 key2 ..keyn
一次性获取多个建
getrange key start stop
redis 127.0.0.1:6379> set title 'chinese'
OK
redis 127.0.0.1:6379> getrange title 0 3
"chin"
redis 127.0.0.1:6379> getrange title 1 -2
"hines"
作用: 是获取字符串中 [start, stop]范围的值
注意: 对于字符串的下标, 左数从 0 开始, 右数从 - 1 开始
- start>=length, 则返回空字符串
- stop>=length, 则截取至字符结尾
- 如果 start 所处位置在 stop 右边, 返回空字符串
getbit key offset
redis 127.0.0.1:6379> set char A
OK
redis 127.0.0.1:6379> getbit char 1
(integer) 1
redis 127.0.0.1:6379> getbit char 2
(integer) 0
redis 127.0.0.1:6379> getbit char 7
(integer) 1
作用: 获取值的二进制表示, 对应位上的值(从左开始, 从 0 编号)
关于二进制运算:
AND: 与运算, 逻辑乘 0x0=0 0x1=1x0=0 1x1=1
OR: 或运算, 逻辑加 0+0=0 0+1=1+0=1 1+1=1
NOT: 逻辑非 非 1 =0 非 0 =1
XOR: 0 异或0=0 0 异或1=1 1 异或 0=1 1 异或 1 =0