简介
最简单的数据结构,相当于Java中的String
基本操作
-
SET key value 将字符串键key的值设置为value,命令返回OK表示设置成功 如果字符串键key已经存在,那么用新值覆盖原来的旧值
127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> get msg "hello world" 127.0.0.1:6379> set msg "hi" OK 127.0.0.1:6379> get msg "hi"SET key value [ NX|XX ] NX: 命令仅在键key不存在的情况下,才进行设置操作;如果键key已经存在,那么SET... NX 命令不做动作(不会覆盖旧值) XX: 命令仅在键key已经存在的情况下,才进行设置操作,如果key不存在,那么SET... XX命令不做动作(一定会覆盖旧值)
在给定NX选项和XX选项的情况下,SET命令在设置成功时返回OK,设置失败时返回nil
样例:
- NX:
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set msg hi NX OK 127.0.0.1:6379> set msg hi NX (nil) - XX
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set msg hi XX (nil) 127.0.0.1:6379> set msg hi OK 127.0.0.1:6379> set msg hi2 XX OK 127.0.0.1:6379> get msg "hi2"
- NX:
-
GET key 返回字符串键key存储的值
127.0.0.1:6379> get msg "hi2" -
SETNX key value 仅在键key不存在的情况下,将键key的值设置成value,效果和set key value NX 一样
-
MSET key value [ key value ... ] 一次为一个或多个字符串键设置值,效果和同时执行多个SET命令一样
127.0.0.1:6379> MSET msg1 value1 msg2 value2 msg3 value3 OK -
MSETNX key value [ key value ... ] 只有在所有给定键都不存在的情况下,MSETNX会为所有给定键设置值,效果和同时执行多个SETNX一样。如果给定的键至少有一个是存在的,那么MSETNX将不执行任何设置操作
-
MGET key [ key ... ] 一次返回一个或多个字符串键的值,效果和同时执行多个GET命令一样
127.0.0.1:6379> mget msg1 msg2 msg3 1) "value1" 2) "value2" 3) "value3" -
GETSET key new-value 将字符串键的值设置为new-value,并返回字符串键在设置新值之前存储的旧值(old value)
127.0.0.1:6379> get msg "hi" 127.0.0.1:6379> getset msg hello "hi" 127.0.0.1:6379> get msg "hello" -
APPEND key value 追加内容到字符串末尾,将值value推入到字符串键key已存储内容的末尾,返回被追加后值的长度
127.0.0.1:6379> get msg "hello" 127.0.0.1:6379> append msg " world" (integer) 11 127.0.0.1:6379> get msg "hello world" -
STRLEN key 返回字符串key存储的值的长度
127.0.0.1:6379> strlen msg (integer) 11
索引
- 字符串的索引(index)以0为开始,从字符串的开头向字符串的结尾依次递增,字符串第一个字符的索引为0,字符的最后一个字符的索引为N-1,其中N为字符串的长度
- 除了正数索引之外,字符串还有负数索引:负数索引以-1为开始,从字符串的结尾向字符串的开头依次递减,字符串的最后一个字符的索引为-N,其中N为字符串的长度
- SETRANGE key index value
从索引index开始,用value覆写给定键key所存储的字符串值。只接受正数索引。
命令返回覆写之后,返回字符串值的长度
127.0.0.1:6379> get msg "hello world" 127.0.0.1:6379> setrange msg 6 XX (integer) 11 127.0.0.1:6379> get msg "hello XXrld" - GETRANGE key start end
返回键key存储的字符串值中,位于start和end两个索引之间的内容。索引可以是正数或者负数
127.0.0.1:6379> getrange msg 5 11 " XXrld" 127.0.0.1:6379> getrange msg -5 -1 "XXrld"
数字操作
只要存储在字符串键里面的值可以被解释为64位整数,或者IEEE-754标准的64位浮点数,那么用户就可以对这个字符串键执行针对数字值的命令
| 值 | 能否执行数字命令 | 原因 |
|---|---|---|
| 123456 | 可以 | 值可以被解释为整数 |
| 3.14 | 可以 | 值可以被解释为浮点数 |
| +123 | 可以 | 值可以被解释为整数 |
| 123456789123456789123456789 | 不可以 | 值太大,不能使用64位整数来存储 |
| 2.0e7 | 不可以 | 不能解释科学计数法表示的浮点数 |
| 123AAA | 不可以 | 值包含字符 |
| AAA | 不可以 | 值为字符串 |
-
INCRBY key increment 将key存储的数字值加上增量increment,命令返回操作执行之后,键key的当前值
127.0.0.1:6379> get msg "10" 127.0.0.1:6379> incrby msg 5 (integer) 15 127.0.0.1:6379> get msg "15" -
DECRBY key decrement 将key所存储的值减去减量decrement,命令返回操作执行之后,键key的当前值
127.0.0.1:6379> get msg "15" 127.0.0.1:6379> decrby msg 2 (integer) 13 127.0.0.1:6379> get msg "13"如果执行INCRBY和DECRBY时,键不存在,命令会将键key的值初始化为0,然后再执行增加或者减少操作
-
INCR key 当前存储key的值上加1,等同于执行INCRBY key 1
127.0.0.1:6379> get msg "13" 127.0.0.1:6379> incr msg (integer) 14 127.0.0.1:6379> get msg "14" -
DECR key 当前存储key的值减1,等同于执行DECRBY key 1
127.0.0.1:6379> get msg "14" 127.0.0.1:6379> decr msg (integer) 13 127.0.0.1:6379> get msg "13" -
INCRBYFLOAT key increment 为字符串键key存储的值加上浮点数增量increment,命令返回操作执行之后,键key的值
127.0.0.1:6379> set num 11 OK 127.0.0.1:6379> incrbyfloat num 0.14 "11.14" 127.0.0.1:6379> get num "11.14" 127.0.0.1:6379> incrbyfloat num -1.82 "9.32" 127.0.0.1:6379> get num "9.32"
二进制数据操作
SET、GET、SETINX、APPEND等命令可以用于设置二进制数据
-
索引 和存储文字时一样,字符串键在存储二进制位时,索引也是从0开始的 但是和存储文字时,索引从左到右依次递增不同,当字符串键存储的是二进制时,二进制位的索引会从左到右依次递减
-
SETBIT key index value 将给定索引上的二进制的值设置为value,命令返回被设置的位原来存储的旧值
-
GETBIT key value 返回给定索引上的二进制位的值
-
BITCOUNT key [start] [end] 计算并返回字符串键值存储的值中,被设置为1的二进制的数量
-
BITOP operation destkey key [ key ... ] 多一个或多个保存二进制位的字符串键执行位元操作,并将结果保存到destkey上 。 operation 可以:AND、OR、NOR、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 ... ] | 多一个或多个key求逻辑非,并将结果保存到destkey |
存储中文注意事项
-
英文字符只需要使用单个字节来存储,而一个中文字符需要使用3个字节来存储 STRLEN、SETRANGE和GETRANGE是为英文设置的,只会在字符为单个字节的情况下正常工作,存储类式中文这样多字节字符,则此三个命令不再适用
-
redis-cli 中使用中文时,必须打开 --raw选项,才能正常显示中文
127.0.0.1:6379> set msg "你好" OK 127.0.0.1:6379> get msg "\xe4\xbd\xa0\xe5\xa5\xbd" 127.0.0.1:6379> strlen msg (integer) 6使用 --raw
[root@localhost utils]# redis-cli --raw 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> get msg 你好 127.0.0.1:6379> strlen msg 6