Redis之字符串(String)

存储String

概述:字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型存储和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度为512MB。

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,

基本语法如下:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis 127.0.0.1:6379> SET runoobkey redis
OK
redis 127.0.0.1:6379> GET runoobkey
"redis"

在以上实例中我们使用了 SET 和 GET 命令,键为 runoobkey。

Redis 字符串命令

下表列出了常用的 redis 字符串命令:

序号 命令 描述
1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
9 SETNX key value 只有在 key 不存在时设置 key 的值
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
11 STRLEN key 返回 key 所储存的字符串值的长度
12 MSET key value [key value ...] 同时设置一个或多个 key-value 对
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位
15 INCR key 将 key 中储存的数字值增一
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment)
17 INCRBYFLOAT key increment 设将 key 所储存的值加上给定的浮点增量值(increment)
18 DECR key 将 key 中储存的数字值减一
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement)
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾

set 命令

格式:set key value [EX.seconds|PX seconds][NX][XX]

功能:set除了可以直接将key的值设为value外,还可以指定一些参数。

  • EX.seconds:为当前key设置过期时间,单位秒,等价于setex命令。

  • PX seconds:为当前key设置过期时间,单位毫秒,等价于psetex命令。

  • NX:指定的key不存在才会设置成功,用于添加指定的key,等价于setex命令

  • XX:指定的key必须存在才会设置成功,用于更新指定key的value。

说明;如果value字符串中带有空格,则该字符串需要使用双引号或者单引号印起来,否则会认为set命令的参数数量不正确。报错。

setex命令和psetex命令(分布式锁)

格式:setex/psetex key seconds value

功能:set expire,其不仅为key指定了value,还为其设置了生存时间,setex的单位为秒,psetex的单位为毫秒。

说明:如果key已经存在,则覆盖旧值,该命令类似于一下两个命令,不同之处是,setex是一个原子性操作,关联值和设置生存时间两个动作会同一时间完成,该命令在redis中用作缓存时,非常实用。

set key value

expire key seconds # 设置生辰时间。

del命令

del key

setnx命令

格式:setnx key value

功能:set if not exists,将key的值设为value,当且仅当key不存在,若给定的key已经存在,则setnx不做任何动作。成功,返回1,否则,返回0。

说明:该命令等价于set key value nx

getset命令

格式:getset key value

功能:将给定key的值设为value,并返回key的旧值

说明:当key存在但不是字符串类型时,返回一个错误,当key不存在时,返回nil。

mset命令msetnx命令

格式:mset/msetnx key value[key value.....]

功能:同时设置一个或者多个key-value值

说明:如果某个给定key已经存在,那么mset会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用msetnx命令,它只会在所有给定key都不存在的情况下进行设置操作。mset/msetnx命令是一个原子操作,所有给定key都会在同一时间被设置,某些给定key被更新而另外一些给定key没有改变的情况不可能发生。该命令永远不会失败。

mget命令

格式:mget key [key ......]

功能:返回所有给定的key值

说明:如果给定的key里面,有某个不存在的key,那么这个key返回特殊值nil。因此,该命令永不失败。

append命令

格式:append key value
append num2 "xxxx"

功能:如果key已经存在并且是一个字符串,append命令将value追加到key原来的值的末尾,如果key不存在,append就简单地将给定key设置为value,就像执行set key value一样。

说明:追加value之后,fkey中字符串的长度

incr命令和decr命令

格式:incr key 或者decr key

功能:increment,自动递增,将key中存储的数字值加1,decrement,自动递减,将key中存储的数字值减一。

说明:如果key不存在,那么key的值会先被初始化为0,然后再执行加1或者减1操作。如果值不是数字,那么返回错误,如果执行正确,则返回加1或者减1后的值。

incr命令和decr命令

格式:incrby key increment 或者decrby key decrement

incrby num2 9
decrby num2 9

功能:将key中存储的数字值增加或者减少指定的数量,这个数值只能是整数,可以是负数,但是不能是小数。

说明:如果key不存在,那么key的值会先被初始化为0,然后再执行加1或者减1操作。如果值不是数字,那么返回错误,如果执行正确,则返回加或者减后的值。

incrbyfloat命令

格式:incrbyfloat key increment 

功能:为key中所存储的值增加浮点数增量increment

说明:与之前的说明相同,没有decrbyfloat命令,但increment为负数可以实现减操作效果。

strlen命令

格式:strlen key 

功能:返回key所储存的字符串值的长度

getrange命令

格式:getstrange key start end

功能:返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定,包括start和end在内。

说明:end必须要比start大,支持负数偏移量,表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。

setrange命令

格式:setstrange key offset value

功能:用value参数替换给定key所存储的字符串值str,从偏移量offset开始

说明:当offset值大于str长度时,中间使用零字节\0xx填充,即0000 0000字节填充,对于不存在的ke当作空串处理。

位操作命令

名称中包含bit的命令,都是对二进制位的操作民营,例如,setbit、getbit、bitcount、bittop、bitfield,这些命令不常用。

应用场景

  • 1.数据缓存

redis作为数据缓存曾,mysql作为数据存储层,应用服务器首先从redis中获取数据,如果缓存中没有,则从mysql中获取数据,先存入缓存层中然后再返回给应用服务器。

  • 2.计数器

在redis中写入一个value为数值型的key作为平台计数器、视频播放计数器等。这个有效客户端访问一次,或者视频播放一次,都会直接修改redis中的计数器,然后再异步方式进行持久化到其他数据源中,例如持久化到mysql中。

  • 3.共享session

对于一个分布式应用系统,如果将类似用户登录信息这样的session数据保存在提供登录服务的服务器中,那么如果用户再次提交像收藏、支付等请求时可能会出现的问题,在提供收藏、登录等服务的服务器中并没有该用户的session数据,从而导致该用户需要重新登录。对于用户来说,这是不能接受的。此时,可以将系统中所有用户的session数据全部保存到redis中,用户在提交新的请求后,系统先从redis中查找相应的session数据,如果存在,则再进行相关操作,否则跳转到登录页面,这样就不会引发重新登录问题。

  • 4.限速器。
    现在很多平台为防止DOS攻击,一般都会限制一个ip不能再一秒内访问超过n次,而redis可以结合key的过期时间于incr命令来完成限速工功能,充当限速器。

注意事项

  • key不要太长,最好不要超过2048个字节,这不仅会消耗内存还会降低查找效率。
  • key不要太短,如果太短会降低key的可读性。
  • 在项目中,key最后有一个统一的命名规范。
posted @ 2020-03-09 23:13  King-DA  阅读(133)  评论(0编辑  收藏  举报