纵横研究院数据库技术专题社区

Redis实战-Redis五种数据类型(四-1 字符串)

2019-04-29  本文已影响22人  擦普洱

本节主要内容

1.字符串(string)
   Redis 字符串数据类型的相关命令用于管理 redis 字符串值,redis字符串就是一个由字节组成的序列,可以存储以下3种类型的值。

Redis中的自增命令和自减命令
命令 用例和描述
INCR INCR key-name  --将键存储的值加1
DECR DECR key-name  --将键存储的值减1
INCRBY INCRBY key-name amount  --将键存储的值加上整数amount
DECRBY DECRBY key-name amount  --将键存储的值减去整数amount
INCRBYFLOAT INCRBYFLOAT key-name amount  --将键存储的值加上浮点数amount,支持版本:Redis 2.6及以上

  当用户将一个值存储到Redis字符串里面的时候,如果这个值可以被解释为十进制整数或者浮点数,那么Redis会觉察到这一点,并允许用户对这个字符串执行各种INCR和DECR操作。如果用户对一个不存在的键或者一个保存了空串的键执行自增或者自减操作,那么Redis在执行操作时会将这个键的值当作是0来处理。如果用户尝试对一个值无法解释为正数或者浮点数的字符串执行自增或者自减操作,那么Redis将向用户返回一个错误。
  下面将展示对字符串执行自增操作和自减操作的一些例子。

#尝试获取一个不存在的键将得到一个None值
127.0.0.1:6379> get keyname
(nil)
#我们既可以对不存在的键执行自增操作,也可以通过可选的参数来指定自增操作的增量。
127.0.0.1:6379> incr keyname
(integer) 1
127.0.0.1:6379> incrby keyname 15
(integer) 16
#和自增操作一样,执行自减操作的函数也可以通过可选的参数指定减量。
127.0.0.1:6379> decrby keyname 5
(integer) 11
#在尝试获取一个键的时候,命令将以字符串格式返回被存储的整数。
127.0.0.1:6379> get keyname
"11"
#即使在设置键时输入的值是字符串,但只要这个值可以被解释成整数,我们就可以把它当做整数来处理。
127.0.0.1:6379> set keyname '13'
OK
127.0.0.1:6379> incr keyname
(integer) 14

  除了自增操作和自减操作之外,Redis还拥有对字符串的其中一部分内容进行读取或者写入的操作。下面将展示处理字符串子串和二进制的命令。

供Redis处理子串和二进制位的命令
命令 用例和描述
APPEND APPEND key-name value --将值value追加到给定键key-name当前存储的值末尾
GETRANGE GETRANGE key-name start end --获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start和end在内
SETRANGE SETRANGE key-name offset value --将从start偏移量开始的子串设置为给定值
GETBIT GETBIT key-name offset --将字节串看作是二进制位串,并将位串中偏移量为offset的二进制位的值
SETBIT SETBIT key-name offset value --将字节串看做是二进制位串,并将位串中偏移量为offset的二进制位的值设置为value
BITCOUNT BITCOUNT key-name [start end] --统计二进制位串里面值为1的二进制位的数量,如果给定了可选的start偏移量和end偏移量,那么只对偏移量指定范围内的二进制进行统计
BITOP BITOP operation dest-key key-name [key-name ...] --对一个或多个二进制位串执行包括并(AND)、或(OR)、异或(XOR)、非(NOT)在内的任意一种按位计算操作,并将计算得出的结果保存在dest-key 键里面

  在使用SETRANGE或者SETBIT命令对字符串进行写入的时候,如果字符串当前的长度不能满足写入的要求,那么Redis会自动地使用空字节(null)来将字符串扩展到所需的长度,然后才会执行更新或写入操作。在使用
GETRANGE读取二进制位串的时候 ,超出字符串末尾的数据会被视为是空串,而在使用GETBIT读取二进制位串的时候,超出字符串末尾的二进制位会被视为0。下面将展示一些字符串处理命令的使用示例:

#将字符串'hello'追加到目前并不存在的'new-string-key'键里,
#append命令在执行之后会返回字符串的当前长度
127.0.0.1:6379> append new-string-key hello
(integer) 5
127.0.0.1:6379> append new-string-key  world!
(integer) 11
#获取字符串第3到第7位之间的子串
127.0.0.1:6379> substr new-string-key 3 7
"lowor"
#将第0位的指定字符串h设定为H
#setrange命令在执行之后同样会返回字符串的当前总长度
127.0.0.1:6379> setrange new-string-key 0 H
(integer) 11
#将第6位的指定字符串w设定为W
127.0.0.1:6379> setrange new-string-key 6 W
(integer) 11

127.0.0.1:6379> get new-string-key
"HellowWrld!"
127.0.0.1:6379> setrange new-string-key 11 25
(integer) 13
#setrange命令既可以用于替换字符串里已有的内容,又可以用于增长字符串
127.0.0.1:6379> setrange new-string-key 11 'how are you?'
(integer) 23
127.0.0.1:6379> get new-string-key
"HellowWrld!how are you?"

127.0.0.1:6379> SETBIT bit 10086 1
(integer) 0
127.0.0.1:6379> getbit bit 10086
(integer) 1
# bit 默认被初始化为 0
127.0.0.1:6379> getbit bit 100
(integer) 0
127.0.0.1:6379>

很多键值数据库只能将数据存储为普通的字符串,并且不提供任何字符串处理操作,但是Redis做到了这一点。

不怕从零开始,只怕从未启程!

参考文献:
菜鸟教程:https://www.runoob.com/redis/redis-keys.html
《Redis实战》Josiah L. Carlson著

上一篇下一篇

猜你喜欢

热点阅读