Redis–string类型
类型是针对value的,key的类型只能是string!!
string类型是基石,其他类型都是建立在string类型上的。
Redis的字符串直接按照二进制的方式存储,不会做任何编码转换。存的是啥,取出来的就是啥。
基本命令
1. set && setex && psetex && setnx
若key存在就覆盖,之前key的TTL也失效。不存在就创建。
set key value [EX seconds | PX milliseconds] [NX|XX] # setex key 10 value set key value ex 10 # 定义的同时设置过期时间为10s # psetex key 10 value set key value px 10 # 定义的同时设置过期时间为10ms # setnx key value set key value NX # key不存在才设置,key存在就不设置(返回nil) # 没有setxx set key value XX # key存在才设置,覆盖原来的key
2. get
获取key对应的value。只能获取string类型对应的value!!
get key
3. mset
一次设置多个key。Redis的client和server通过网络传输。一次设置多个可以减少网络传输的次数,提高效率。(网络I/O还是很慢的)。Redis中很多操作都可以批量进行。
但是也不要一次设置太多key,会导致client处理很长时间而使得其他的命令被阻塞住。
mget key value [key1 value1 ...]
4. mget
一次获取多个value
mget key [key1 ...]
5. incr && incrby
对应的value必须是整型的字符串。如 ”111“
若key不存在,则将其插入,且value是1 (0 + 1)
incr使value + 1
incrby使value + 指定的数
incr key incr key 10
6. decr && decrby
和上一个基本一样。
decr使value - 1
decrby使value - 指定的数
decr key decrby key 10
7. incrbyfloat (很少用)
对应的value必须是浮点型的字符串。如 ”1.9“
若key不存在,则将其插入,且value是 0 + 指定的数
使value +/- 指定的浮点数
incrbyfloat key 0.9 # +0.9 incrbyfloat key -0.1 # -0.1
8. append
字符串追加,返回当前value的长度(字节数)。(UTF-8下一个汉字三个字节,unicode下一个汉字两个字节。)
# 把value追加到key已有的value后面,key不存在就相当于设置 append key value
9. getrange && setrange
getrange获取 [start, end] 区间的子串,其中 -1 代表倒数第一个字符,-2代表倒数第二个字符…
如果value里保存的是汉字,那么这样获取子串是未定义的!
# 获取value下标是 0~3 的子串(左闭右闭) getrange key 0 3
setrange从指定偏移量(offset)开始,使新的value替代原来的value(中的一部分)
若key不存在,就自动生成一个value,把offset之前的内容填充成 0x00
# setrange key offset value setrange key 3 "aaa" # 3 是下标(从0计算)
10. strlen
获取value字符串的长度,单位是字节。
在MySQL的varchar(N)中N代表的是字符,而非字节!
strlen key
string类型内部编码
1. int
适用于8字节的长整型。
2. embstr
适用于长度较短的字符串。小数的内部编码是字符型!
3. raw
通用的字符串。
查看内部编码:
object encoding key
string类型的应用场景
1. 用作缓存
此时随着时间的推移,会不断有要访问的数据不在缓存里,就不断会有数据写到缓存,那缓存中的数据就会越来越多!!解决:
在把数据写到Redis时给这个key设置过期时间,过期就自动删除了(惰性删除策略和定期删除策略)。
Redis在内存不足时也有淘汰策略,释放内存。
2. 计数功能
例如视频网站中视频播放次数,点赞次数…
3. 存储共享会话(Session)
Cookie(浏览器存储数据的机制)
Session(服务器存储数据的机制),存储客户端和服务器交互过程中专属于某个客户端的数据。但是很多服务器都是分布式的,这个客户下次有可能会访问到其他的机器,但是这个这个客户的相关数据在另一个机器上!!
解决:使用Redis将Session信息集中管理,集群中所有机器共享这些信息:
4. 手机验证码
借用Redis的数据过期机制。
分布式的,这个客户下次有可能会访问到其他的机器,但是这个这个客户的相关数据在另一个机器上!!
解决:使用Redis将Session信息集中管理,集群中所有机器共享这些信息:
[外链图片转存中…(img-Dm0uetb9-1700646156087)]
4. 手机验证码
借用Redis的数据过期机制。
————————————————
版权声明:本文为CSDN博主「月球上的星星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_62797154/article/details/134558785