redis String 结构及命令详解

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??oworld\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kk"

向字符串后边附加

append key value
例如:
append word @@ # 向 key 所对应的value 末尾处添加两个 "@@"
127.0.0.1:6379> append word @@
(integer) 24
127.0.0.1:6379> get word
"he??oworld\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kk@@"

获取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 运算
posted @ 2020-04-26 14:19  sha_ka  阅读(123)  评论(0编辑  收藏  举报