文章目录
- 常用命令
- 设置值
- 获取值
- 计数
- 不常用命令
- 追加(append)
- 替换 (setrange)
- 获取子串(getrange)
- 获取字符串长度(strlen)
- 设置新值返回旧值 (getset)
- 位操作命令
- 内部编码
常用命令
设置值
- set:
- 参数:
- ex 设置秒级的过期时间(expire)
- px 设置毫秒级的过期时间(pexpire)
- nx 键不存在的时候,才可以设置成功(not exist)
- xx 键存在的时候,才能设置成功(exist)
- 说明:如果 value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。
- setex与psetex:
- 格式:setex/psetex key seconds value(ex就是expire的简写)
- 功能:不仅为 key 指定了 value,还为其设置了生存时间。setex 的单位为秒,psetex 的单位为毫秒。
- 说明:如果 key 已经存在, 则覆写旧值。该命令类似于使用set命令并设置过期时间,不同之处是,setex和psetex是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
- setnx:
- 格式:setnx key value
- 功能:(set if Not exist)将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key已经存在,则 setnx不做任何动作。成功,返回 1,否则,返回 0。
- 说明:该命令等价于 set key value nx
- mset与msetnx:
- 格式:mset/msetnx key value [key value …]
- 功能:同时设置一个或多个 key-value 对。
- 说明:m表示multiple。如果某个给定 key 已经存在,那么 mset会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 msetnx 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。mset/msetnx 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。mset命令永不失败。
获取值
- get:
- 格式:get key
- 功能:获取 key 中设置的字符串值
- 返回值:key存在,返回key对应的value;key不存在,返回nil
- mget:
- 格式:mget key [key …]
- 功能:返回所有(一个或多个)给定 key 的值。
- 说明:如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。
计数
- incr 与 decr:
- 格式:incr key 或 decr key
- 功能:increment,自动递增。将 key 中存储的数字值增一。decrement,自动递减。将 key 中存储的数字值减一。
- 说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回加一或者减一后的值。
- incrby 与 decrby
- 格式:incrby key increment 或 decrbykey decrement
- 功能:将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。
- 说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。
- incrbyfloat
- 格式:INCRBYFLOAT key increment
- 功能:为 key 中所储存的值加上浮点数增量 increment 。
- 说明:与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。
不常用命令
追加(append)
- 格式:append key value
- 功能:如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
- 说明:追加 value 之后, key 中字符串的长度。
替换 (setrange)
- 格式:setrange key offset value
- 功能:用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。
- 说明:当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。
获取子串(getrange)
- 格式:getrange key start end
- 功能:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。
- 说明:end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。
获取字符串长度(strlen)
- 格式:strlen key
- 功能:返回 key 所储存的字符串值的长度。
- 说明:当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。
设置新值返回旧值 (getset)
- 格式:getset key value
- 功能:将给定 key 的值设为 value ,并返回 key 的旧值。
- 说明:当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。
位操作命令
名称中包含 BIT 的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield。
内部编码
String类型的redisObject内部对应了三种物理编码方式:int、embstr、raw
- **int:**保存的是long型(长整型)的64位(8个字节)有符号整数。只有整数才会使用int,如果是浮点数,Redis内部会先将浮点数转换为字符串,然后保存字符串值。
- embstr:代表的是embstr格式的简单的动态字符串(Simple Dynamic String,SDS),是可以修改的字符串,内部结构实现上类似于Java的ArrayList采用分配冗余空间的方式来减少内存的频繁分配。保存长度小于44字节的字符串。
- **raw:**保存长度大于44字节的字符串