在redis中,字符串可以存储一下3中类型的值
- 字符串
- 整数
- 浮点数
用户可以通过给定一个任意的数值,对存储着整数或者浮点数的字符串执行自增或者自减操作,在有需要的时候,redis还会将整数转换成浮点数。整数的取值返回和系统的长整数的取值范围相同,而浮点数的取值范围和精度则与IEEE 754标准的双精度相同。redis明显区分字符串,整数和浮点数的做法是一种优势,比起只能够存储字符串的做法,redis的做法在数据变现方面具有更大的灵活性。
String类型的常用指令
命令 | 用例 |
---|---|
incr | incr key-name 将键存储的值加上1 |
decr | decr key-name 将键存储的值减去1 |
incrby | incrby key-name 将键存储的值加上整数amount |
decrby | decrby key-name 将键存储的值减去整数amount |
incrbyfloat | incrbyfloat key-name 将键存储的值加上浮点数amount,这个命令rdis2.6或以上的版本可用 |
127.0.0.1:6379> get i
"1"
127.0.0.1:6379> incr i
(integer) 2
127.0.0.1:6379> decr i
(integer) 1
127.0.0.1:6379> incrby i 3
(integer) 4
127.0.0.1:6379> DECRBY i 3
(integer) 1
127.0.0.1:6379>
当用户将一个值存储到redis字符串里面的时候,如果这个值可以被解释为十进制整数或者浮点数,那么redis会察觉到这一点,并允许用户对这个字符串执行各种incr和decr操作。如果用户对一个不存在的键或者一个保存了空串的键执行自增或者自减操作,呢么redis在执行操作时会将这个键的值当作是0来处理。如果用户尝试对一个值无法被解释为整数或者浮点数的字符创执行自增或者自减操作,那么redis将会向用户返回一个错误
除了自增操作和自减操作之外,redis还拥有对字符串的其中一部分内容读取或者写入操作。这些指令可以高效的将结构化数据打包存储到字符串中。
命令 | 用例 |
---|---|
append | append key-name value 将值value追加到给定键key-name当前存储的值的末尾 |
getrange | getrange key-name start end 获取一个由偏移量start至偏移量end范围内错you字符组成的子串,包括start和end在内 |
setrange | setrange key-name offset end 将从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键里面。 |
赋值语法:
SET KEY_NAME VALUE: (说明:多次设置name会覆盖) (Redis SET 命令用于设置给定 key 的值。如果 key 已经存储值, SET 就覆写旧值,且无视类型)
命令:
SETNX key1 value:(not exist) 如果key1不存在,则设值 并返回1。如果key1存在,则不设值并返回0;(解决分布式锁 方案之一,只有在 key 不存在时设置 key 的值。Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值)
SETEX key1 10 lx :(expired) 设置key1的值为lx,过期时间为10秒,10秒后key1清除(key也清除)
SETRANGE string range value: 替换字符串
取值语法:
GET KEY_NAME :Redis GET命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
GETRANGE key start end :用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)
substr key start end :也可以用于截取字符串
redis现在的getrange命令是有substr命令改名而来的,因此至今仍然可以使用substr命令来截取字符串,最好使用getrange命令。
GETBIT key offset :对 key 所储存的字符串值,获取指定偏移量上的位(bit)
GETSET语法: GETSET KEY_NAME VALUE :Getset 命令用于设置指定 key 的值,并返回 key 的旧值,当 key 不存在时,返回 nil
STRLEN key :返回 key 所储存的字符串值的长度
删值语法:
DEL KEY_Name :删除指定的KEY,如果存在,返回值数字类型。
DEL k1 k2 k3:删除k1 k2 k3
批量写:MSET k1 v1 k2 v2 ... 一次性写入多个值
批量读:MGET k1 k2 k3
GETSET name value :一次性设值和读取(返回旧值,写上新值)
自增/自减:
INCR KEY_Name :Incr 命令将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
自增:INCRBY KEY_Name :增量值 Incrby 命令将 key 中储存的数字加上指定的增量值
自减:DECR KEY_NAME 或 DECYBY KEY_NAME 减值 :DECR 命令将 key 中储存的数字减1
:(注意这些 key 对应的必须是数字类型字符串,否则会出错,)
字符串拼接:APPEND KEY_NAME VALUE
:Append 命令用于为指定的 key 追加至未尾,如果不存在,为其赋值
字符串长度 :STRLEN key
应用场景
1、String通常用于保存单个字符串或JSON字符串数据
2、因String是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储
3、计数器(常规key-value缓存应用。常规计数: 微博数, 粉丝数)
INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果。假如,在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。 不少网站都利用redis的这个特性来实现业务上的统计计数需求。