三、Redis据结构之字符串
1、 Redis数据结构之字符串
Redis的String类型可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。
1.1、 命令行模式
进入命令行模式。
redis-cli -a password_value
redis-cli -a password_value --raw
--raw 避免中文显示乱码
1.2、 查看命令帮助
127.0.0.1:6379> help @string
APPEND key value
summary: Append a value to a key
since: 2.0.0
BITCOUNT key [start end]
summary: Count set bits in a string
since: 2.6.0
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
summary: Perform arbitrary bitfield integer operations on strings
since: 3.2.0
BITOP operation destkey key [key ...]
summary: Perform bitwise operations between strings
since: 2.6.0
BITPOS key bit [start] [end]
summary: Find first bit set or clear in a string
since: 2.8.7
DECR key
summary: Decrement the integer value of a key by one
since: 1.0.0
1.3、 Exists
查看key是否存在,返回true / false(0/1)。
127.0.0.1:6379> EXISTS a
1
127.0.0.1:6379> EXISTS b
0
1.4、 查看数据过期时间
127.0.0.1:6379> ttl a
-1 # 永不过期
127.0.0.1:6379> ttl b
(integer) 2 # 过期时间还有2个单位
1.5、 增加数据
增加数据的命令有以下几个:set,setex,psetex,setnx。
#ex为多少秒过期 px为多少毫秒过期,nx为若不存在才创建,xx为若存在才覆盖创建
set key value [ex seconds] [px milliseconds] [nx|xx]
1.5.1、 使用set命令新增一个键值对及其EX,PX用法
# 设置
127.0.0.1:6379> set name 陈阳
OK
127.0.0.1:6379> get name
陈阳
# 设置过期时间为秒
127.0.0.1:6379> set name 陈阳 ex 10
OK
127.0.0.1:6379> ttl name
6
127.0.0.1:6379> ttl name
-2
# set 和 ex合并成setex
127.0.0.1:6379> SETEX name 10 陈阳
OK
127.0.0.1:6379> ttl name
5
127.0.0.1:6379> ttl name
-2
# 设置过期时间为毫秒
127.0.0.1:6379> set name 陈阳 px 10
OK
127.0.0.1:6379> TTL name
-2
# set 和 px 合并使用
127.0.0.1:6379> PSETEX name 100 陈阳
OK
127.0.0.1:6379> ttl name
-2
1.5.2、 使用set命令新增一个键值对及其NX,XX用法
Nx:当key不存在时创建,已存在则忽略。
Xx:当key存在则更新,不存在则忽略。
# nx
127.0.0.1:6379> set name alvin nx
OK
127.0.0.1:6379> get name
alvin
127.0.0.1:6379> set name 陈阳
OK
127.0.0.1:6379> get name
陈阳
127.0.0.1:6379> set name alvin nx
127.0.0.1:6379> get name
陈阳
# set 与 nx 合并使用
127.0.0.1:6379> setnx name alvin
(integer) 0
127.0.0.1:6379> get name
陈阳
1.5.3、 批量增加
同时定义多个键值对,mset也可以和nx一起用。
mset key1 value1 [key2 value2...] #批量创建kv,已存在的会被更新
msetnx key1 value1 [key2 value2...] #批量创建kv,所有key不存在才会创建
127.0.0.1:6379> mset k1 a k2 b k3 c
OK
127.0.0.1:6379> mget k1 k2 k3
1) "a"
2) "b"
3) "c"
1.6、 删除数据
使用del命令删除数据,可批量可单个删除。
格式
del key1 [key2 key3...]
案例
127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> del name_xx
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 name_xx name_nx
1) (nil)
2) (nil)
3) (nil)
4) (nil)
5) "wyk"
1.7、 更改数据
修改已经存在的数据。
1.7.1、 使用set命令修改数据
127.0.0.1:6379> set name alvin
OK
127.0.0.1:6379> get name
"alvin"
127.0.0.1:6379> set name alvin
OK
127.0.0.1:6379> get name
"alvin"
1.7.2、 使用getset命令修改数据
等同于get+set,执行此命令返回get的结果,然后将该key更新为新的value,下次再get的时候查到的就是新的value。
127.0.0.1:6379> GETSET name alvin
陈阳
127.0.0.1:6379>
1.7.3、 使用setrange按下标更新数据
对指定下标的字符串进行更新,下标从0开始算起。
127.0.0.1:6379> SETRANGE name 5 alvin
10
127.0.0.1:6379> get name
alvinalvin
1.8、 查找数据
1.8.1、 查看所有的key
# 查看所有的Key,在数据量大的Redis中慎用,容易卡死。
127.0.0.1:6379> KEYS *
1) "name"
2) "a"
1.8.2、 根据key获取数据
使用get获得指定key的value。
127.0.0.1:6379> get key
1.8.3、 批量获得指定keys的values
mget key1 [key2 key3...]
127.0.0.1:6379> MGET a name
b
alvinalvin
127.0.0.1:6379>
1.8.4、 从字符串的指定开始结束下标截取字符串
getrange key start end
127.0.0.1:6379> GETRANGE name 1 4
lvin
127.0.0.1:6379>
1.9、 计数
1.9.1、 指定key递增
对指定的key的value加1,递增步长默认1,如果key不存在,其初始值为0,在incr之后其值为1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息。
127.0.0.1:6379> INCR num
1
127.0.0.1:6379> INCR num
2
1.9.2、 指定key递减
对指定的key的value减1,递减步长默认1,如果key不存在,其初始值为0,在decr之后其值为-1,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息。
127.0.0.1:6379> DECR num
1
127.0.0.1:6379> DECR num
0
1.9.3、 递增指定长度
对指定的key的value加指定的步长,递增步长可指定,如果key不存在,其初始值为0,在incrby之后其值为步长,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息。
#步长increment为整数,当为负数时效果等于递减
incrby key increment
1.9.4、 递减指定长度
对指定的key的value减指定的步长,递减步长可指定,如果key不存在,其初始值为0,在decrby之后其值为步长的负数,如果value的值不能转为整型,如hello,该操作将执行失败并返回相应的错误信息。
#步长increment为整数,当为负数时效果等于递増
decrby key increment
redis> SET count 100
OK
redis> DECRBY count 20
(integer) 80
1.10、 追加
1.10.1、 在字符串最后面追加子串
append key value
# 对不存在的 key 执行 APPEND
## 确保 myphone 不存在
redis> EXISTS myphone
(integer) 0
# 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
## 字符长度
redis> APPEND myphone "nokia"
(integer) 5
# 对已存在的字符串进行 APPEND
## 长度从 5 个字符增加到 12 个字符
redis> APPEND myphone " - 1110"
(integer) 12
redis> GET myphone
"nokia - 1110"
1.11、 长度
1.11.1、 返回key对应value的字符长度
strlen key
127.0.0.1:6379> strlen xiaoming
(integer) 7

浙公网安备 33010602011771号