String 结构及命令详解
设置一个 KV
set key value [EX 秒数]|[PX 毫秒数] [NX 不存在]|[XX 存在]
例如:
set site www.site.com EX 10
当EX 和 PX 同时存在的时候 已后面设置的为准 他们是互斥的 一起使用没有意义
NX 不存在时设置
XX 存在时设置
127.0.0.1:6379> set site www.site.com EX 10 NX
OK
127.0.0.1:6379> set site www.site.com EX 10 NX
(nil)
127.0.0.1:6379> set sites www.site.com EX 10 XX
(nil)
127.0.0.1:6379> set sites www.site.com EX 10 NX
OK
127.0.0.1:6379> set sites www.sites.com EX 10 XX
OK
127.0.0.1:6379> keys *
1) "age"
2) "sites"
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set sige sige.com xx
(nil)
127.0.0.1:6379> set sige sige.com Nx
OK
一次性设置/获取多个 KV
mset k1 v1 k2 v2 k3 v3 k4 v4 # mset = multi set
例如:
mset a aa b bb c cc
mget k1 k2 k3 ... kn
例如:
mget a b c
127.0.0.1:6379> mset a aman b bold c control d dimod
OK
127.0.0.1:6379> keys *
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379> mget a b c
1) "aman"
2) "bold"
3) "control"
把字符串的 offset 偏移字节,改成 value
setrange key offset value
例如:
set word 2 ??
# 从 0 开始计数 第 2 位的字符 换成两个"?"
当 offset 超出 value 的范围的时候 用 0x00 填充
127.0.0.1:6379> set word helloworld
OK
127.0.0.1:6379> get word
"helloworld"
127.0.0.1:6379> setrange word 2 ??
(integer) 10
127.0.0.1:6379> get word
"he??oworld"
127.0.0.1:6379> setrange word 20 kk
(integer) 22
127.0.0.1:6379> get word
"he??oworldx00x00x00x00x00x00x00x00x00x00kk"
向字符串后边附加
append key value
例如:
append word @@ # 向 key 所对应的value 末尾处添加两个 "@@"
127.0.0.1:6379> append word @@
(integer) 24
127.0.0.1:6379> get word
"he??oworldx00x00x00x00x00x00x00x00x00x00kk@@"
获取key 所对应value 的部分value
getrange key start stop # [start, stop] 前后都包括
例如:
getrange area 1 4
127.0.0.1:6379> set area chinese
OK
127.0.0.1:6379> getrange area 1 4
"hine"
127.0.0.1:6379> getrange area 4 10 # 后半边超出范围
"ese"
127.0.0.1:6379> getrange area 10 20 # 全部超出范围
""
127.0.0.1:6379> getrange area 0 -3 # 支持负索引
"chine"
127.0.0.1:6379> getrange area 4 3 # 不符合常规的 start 比 stop 还大 返回空字符串
""
获取返回旧值,返回新值
getset key value # value 是已存在 key 的新的 value
例如:
getset status wakeup
127.0.0.1:6379> set status sleep
OK
127.0.0.1:6379> getset status wakeup
"sleep"
Value 增加 1、减少 1(必须为数字)
incr key # 增加 1
例如:
incr age
decr key # 减少 1
例如:
decr age
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> decr age
(integer) 10
127.0.0.1:6379> set name fuck # value 不是数字
OK
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
value 增加 、减少 自定义的”整数“数值
incrby key [number] # 增加一个自定义的数值
例如:
incrby age 5
decrby key [number] # 减少一个自定义的数值
例如:
decrby age 5
127.0.0.1:6379> incrby age 3
(integer) 13
127.0.0.1:6379> decrby age 2
(integer) 11
127.0.0.1:6379> incrby age # 不能省略 没有默认的值
(error) ERR wrong number of arguments for 'incrby' command
value 增加浮点数值
incrbyfloat key [float number]
例如:
incrbyfloat age 0.5
没有 decrbyfloat 这样一个操作
127.0.0.1:6379> incrbyfloat age .5
"11.5"
127.0.0.1:6379> decrbyfloat age 0.3
(error) ERR unknown command `decrbyfloat`, with args beginning with: `age`, `0.3`,
在位上做操作
setbit key offset [0/1]
例如:
setbit char 2 1 # 0100 0001 65 'A' ===> 0110 0001 97 'a'
如果offset 过大 则会中间填充 0
offset 最大为多少呢? (2^32 - 1) 可推算出 value 最大为512M
2^32/8 = 2^32 * 2^-3 = 2^29 = 10 + 10 + 9 k->M. 512M 1KB = 1024B(2^10) 1M = 1024KB
127.0.0.1:6379> setbit char 2 1
(integer) 0
127.0.0.1:6379> get char
"a"
127.0.0.1:6379> setbit char 2 0
(integer) 1
127.0.0.1:6379> get char
"A"
bitop [and/or/xor/not] 接收者 运算者1 运算者2
例如:
bitop OR char char lower
127.0.0.1:6379> setbit lower 2 1 # 0010 0000
(integer) 0
127.0.0.1:6379> get lower
" "
127.0.0.1:6379> set char Q
OK
127.0.0.1:6379> bitop OR char char lower # 做或or运算 转换大小写 97-65=32
(integer) 1
127.0.0.1:6379> get char
"q"
# 如果想转换大写 请使用 1101 1111 做 and 运算