三、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

 

posted @ 2020-12-17 19:36  行哥  阅读(86)  评论(0)    收藏  举报