四、Redis字符串类型基本操作记录(2)

作者: 温新

分类: 【Redis】

阅读: 2335

时间: 2020-08-30 10:52:32

字符串类型是Redis中最基本的数据类型,String可以存储任何形式的字符串,包括二进制数据。

一个String类型键允许存储的数据最大容量是512MB。

set 设置指定key的值

​ 语法:set key value

127.0.0.1:6379> set name zhaoliu
OK
127.0.0.1:6379> set name 'li si'
OK

1)set设置给定key的值。如果key已存储其它值,则覆盖旧值;

2)如果有空格等其它字符,则使用引号包含。

get 获取指定key的值

​ 语法:get key

127.0.0.1:6379> get name
"li si"

# 获取不存在的key
127.0.0.1:6379> get name1
(nil)

# 获取不是String类型的key
127.0.0.1:6379> lpush a '111'
(integer) 3
127.0.0.1:6379> get a
(error) WRONGTYPE Operation against a key holding the wrong kind of value

获取指定key的值,如果key不存在,则返回nil,如果key存储的值不是String类型,则返回错误

mset 设置一个或多个key-value对

​ 语法:mset key1 value1 key2 value2 ...

127.0.0.1:6379> mset keya valuea keyb valueb
OK

# 设置已经存在的key
127.0.0.1:6379> mset keya 'i ma a' keyb 'i am b'
OK

如果key存在,则新值覆盖旧值

mget 获取一个或多个给定key的值

​ 语法:mget key1 key2 ...

# 获取一个key的值
127.0.0.1:6379> mget keya
1) "i ma a"

# 获取多个key的值
127.0.0.1:6379> mget keya keyb
1) "i ma a"
2) "i am b"

msetnx 设置一个或多个key-value对,当且仅当所有key不存在

​ 语法:msetnx key1 value1 key2 value2 ...

127.0.0.1:6379> msetnx a1 10 a2 20
(integer) 1

# 存在key,设置不成功
127.0.0.1:6379> msetnx num 10 age 10
(integer) 0

getset 设置指定key的值,并返回旧值

​ 语法:getset key value

127.0.0.1:6379> getset name 'wang wu'
"li si"

127.0.0.1:6379> get name
"wang wu"

# key不存在,返回nil
127.0.0.1:6379> getset aa 'i am aa'
(nil)

1)当key不存在时,返回nil

2)当key不是字符串时,报错

setrange 为指定的key进行指定范围的value值,从offset处开始重写

​ 语法:setrange key offset value

# 将指定偏移量开始处的值进行重写
127.0.0.1:6379> get name
"wang wu"
127.0.0.1:6379> setrange name 5 hello
(integer) 10
127.0.0.1:6379> get name
"wang hello"
127.0.0.1:6379> 

getrange 获取指定在key中指定范围(偏移量)的字符串

​ 语法:getrange key start end

# 获取所有指定范围的内容,如同get
127.0.0.1:6379> get keya
"i ma a hello"
127.0.0.1:6379> getrange keya 0 -1
"i ma a hello"

# 获取keya中hello
127.0.0.1:6379> getrange keya 7 -1
"hello"
127.0.0.1:6379> getrange keya 7 12
"hello"

append 为指定的key追加值

​ 语法:append key value

# 已存在的key
127.0.0.1:6379> append keya ' hello'
(integer) 12
127.0.0.1:6379> get keya
"i ma a hello"

# 不存在的key
127.0.0.1:6379> append name 'li si'
(integer) 5
127.0.0.1:6379> get name
"li si"

1)若key存在,则将value追加到原来的key值的末尾

2)若key不存在,则进行设置改key的值为value,可以理解为执行set操作

strlen 获取指定key中值的长度

​ 语法:strlen key

127.0.0.1:6379> strlen keya
(integer) 12

# key不存在,返回0
127.0.0.1:6379> strlen ziruchu
(integer) 0

# key不是字符串时报错
127.0.0.1:6379> lpush db mysql redis
(integer) 2
127.0.0.1:6379> strlen db
(error) WRONGTYPE Operation against a key holding the wrong kind of value

1)只能获取key类型为字符串的值的长度,否则报错

2)当key不存在时,返回0

incr 将key中存储的数字值增1

​ 语法:incr key

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2

# key中的值不是数字类型
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range

1)key不存在,则进行设置,并值为1

2)若key的值不是数字类型,则报错

decr 将key中存在的数字值减1

​ 语法:decr key

127.0.0.1:6379> decr num
(integer) 2
127.0.0.1:6379> decr num
(integer) 1
127.0.0.1:6379> decr num
(integer) 0
127.0.0.1:6379> decr num
(integer) -1

# 当key不存在
127.0.0.1:6379> decr num1
(integer) -1

1)当key存在,一直decr会减为负数

2)当key不存在,初始值为-1

incrby 将指定key的值加上给定的增量值

​ 语法:incrby key 数字值

127.0.0.1:6379> incrby num 10
(integer) 9
127.0.0.1:6379> incrby num 10
(integer) 19

# 不存在的key
127.0.0.1:6379> incrby num3 10
(integer) 10
# key不是数字型,则报错
127.0.0.1:6379> incrby keya 10
(error) ERR value is not an integer or out of range

1)若key不存在,则初始化为指定的值

2)当key不是数字型值,则报错

decrby 将指定key的值减去给定的增量值

​ 语法:decrby key 数字值

127.0.0.1:6379> decrby num3 2
(integer) 8

# key不存在
127.0.0.1:6379> decrby num4 10
(integer) -10
# key中值不是数值型
127.0.0.1:6379> decrby name 10
(error) ERR value is not an integer or out of range

1)key不存在,则初始化为指定的值的负数值

2)key不是数字型,则报错

setnx key不存在时设置key的值

​ 语法:setnx key value

127.0.0.1:6379> setnx age 18
(integer) 1

# key存在,设置不成功,返回0
127.0.0.1:6379> setnx name 'xiao bai'
(integer) 0
127.0.0.1:6379> get name
"wang wu"

只能用于设置不存在的key

setex 为指定的key设置过期时间

​ 语法:setex key 时间(秒) value

127.0.0.1:6379> setex db 60 db 
# 查看过期时间
127.0.0.1:6379> ttl db
(integer) 56

# 不存在的key,相当于set,并设置过期时间
127.0.0.1:6379> setex db 10 mysql
OK
# 替换旧值并设置过期时间
127.0.0.1:6379> setex age 60 19
OK
127.0.0.1:6379> get age
"19"

1)key存在,则旧值替换新值

2)key不存在,则设置值并设置过期时间

psettex 以毫秒为单位设置key的有效时间

​ 语法:psetex key 毫秒值 value

127.0.0.1:6379> psetex gender 10000 nan
OK

**incrbyfloat 将key所存储的值加上给定的浮点增量值 **

​ 语法:incrbyfloat key 增量值

127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incrbyfloat num 5.5
"6.5"
127.0.0.1:6379> incrbyfloat num 5
"11.5"

# 不存在的key
127.0.0.1:6379> incrbyfloat num10 10.1
"10.1"

# 不是数字值 则报错
127.0.0.1:6379> get name
"wang hello"
127.0.0.1:6379> incrbyfloat name 5.5
(error) ERR value is not a valid float

位操作

一个字节由8个二进制位组成。Reids有4个位操作命令setbit、getbit、bitcount、bitop。

# 设置一个键值对
127.0.0.1:6379> set foo bar
OK

bar这3个字母分别对应的ASCII为98、97、114,转成二进制分别为01100010、01100001、01110010

b a r
01100010 01100001 01110010

getbit 获取key中值指定偏移量的位(bit),偏移量索引从0开始

​ 语法:getbit key 偏移量

getbit命令获取一个字符串类型键指定位置的二进制位的值(0或1),索引从0开始

# 获取bar的第0位,也是b的ASSIC二进制的第一个数字
127.0.0.1:6379> getbit foo 0
(integer) 0
127.0.0.1:6379> getbit foo 1
(integer) 1
127.0.0.1:6379> 

获取二进制位的索引超过键值的二进制位的实际长度则默认位值为0

setbit 对key中值设置或清楚指定偏移量上的位

​ 语法:setbit key 偏移量 value

# 设置bar中b对应的二进制位,从0开始数,也是第7个数,从1改0
127.0.0.1:6379> setbit foot 6 0
(integer) 1

若设置的位置超过了二进制位的长度,setbit命令自动将中间的二进制位设置为0。

设置一个不存在的键指定的二进制位值会自动将前面的位赋值为0。

bitcount 获取字符串类key中值是1的二进制为个数

​ 语法:bitcount key [start end]

1)获取所有二进制为1的总数

127.0.0.1:6379> bitcount foo
(integer) 11
127.0.0.1:6379> bitcount foo 0 -1
(integer) 11

2)获取前2个字节指定范围内二进制为1的总数

127.0.0.1:6379> bitcount foo 0 1
(integer) 7

bittop 对个字符串key进行位运算,并将结果存储在指定key中

​ 语法:bittop 位运算符 结果存储键 key [key1 key2 ...]

​ 参数解释:

​ 位运算符有:AND、OR、XOR、NOT

127.0.0.1:6379> set foo1 bar
OK
127.0.0.1:6379> set foo2 aar
OK
127.0.0.1:6379> bitop OR result foo1 foo2
(integer) 3
127.0.0.1:6379> get result
"car"
请登录后再评论