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最后有一个统一的命名规范。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/12452457.html