腾讯云网站建设教程视频,东莞十大企业,html在线模板,广告推广系统基础概念
字符串、数字#xff0c;都会转化为字符串来进行存储 以二进制的方式存储在内存中
key的命名规范
key不宜过长#xff0c;消耗内存#xff0c;且在数据查找的这类键值的计算成本高#xff08;通过hash计算来查找#xff09;不宜过短#xff0c;可读性查值一…基础概念
字符串、数字都会转化为字符串来进行存储 以二进制的方式存储在内存中
key的命名规范
key不宜过长消耗内存且在数据查找的这类键值的计算成本高通过hash计算来查找不宜过短可读性查值一个字符串类型的值最多能存储512M内容
常用命令--必须掌握
1.存字符串类型的值 set key value nx ex 说明设置一个字符串的key
特殊参数 nx - not exixt 代表当key不存在时才存储这个key ex - expire 过期时间单位s
例子 set username mike 2.取某个key所对应的值 get key 说明获取指定 key 的值,如果key不存在则返回null
3.求key存储值得长度 strlen key 说明获取key存储值得长度
4. getrange key start stop 说明获取指定范围切片内容包含start stop
5. setrange key index value 说明从索引值开始用value替换原来得内容并返回最新得长度
数值操作--必须掌握
1. incrby key 步长 说明 将key增加指定得步长
2. decrby key 步长 说明 将key减少指定得步长
3. incr key : 1 操作 4. decr key : -1操作 应用场景
缓存
说明将MySQL中高频访问的数据存储到redis字符串类型中
并发计数 -- 点赞/秒杀
说明通过redis单进程单线程的特点由redis负责计数由redis负责计数并发问题转为串行问题
带有效期的验证码
说明借助过期时间存储验证码到期后自动消亡
过期时间
默认情况下key没有设置过期时间需要手动指定
方案1直接用set的ex参数 set key value ex 3 方案2使用expire通用命令 1.set key value 2.expire key 5 # 秒 3.pexpire key 5 # 毫秒 注意这种方案可能存在丢包 检查过期时间
查看过期时间 ttl key -- 通用命令
返回值 -1代表当前key没有过期时间 大于0代表当前key的剩余存活时间 -2 代表当前key不存在
删除过期时间 persist key 说明把带有过期时间的key 变为 永久不过期
返回值: 1代表删除过期时间成功/ 0代表当前key没有过期时间 or key 不存在
Redis删除过期key机制
每个redis数据库中都会有一个特殊的容器负责存储带有过期时间的key以及它对应的过期时间,
这个容器称之为“过期字典”。
针对过期字典中的keyredis结合 惰性删除 和 定期删除 俩大机制 有效删除过期数据
Redis 使用的过期删除策略是惰性删除定期删除这两种策略配和使用。
惰性删除 当我们查询一个 key 时Redis 首先检查该 key 是否存在于过期字典中
如果不在则正常读取键值如果存在则会获取该 key 的过期时间然后与当前系统时间进行比对如果比系统时间大那就没有过期否则判定该 key 已过期。
惰性删除优缺点
优点
因为每次访问时才会检查 key 是否过期所以此策略只会使用很少的系统资源因此惰性删除策略对 CPU 时间最友好。缺点
如果一个 key 已经过期而这个 key 又仍然保留在数据库中那么只要这个过期 key 一直没有被访问它所占用的内存就不会释放造成了一定的内存空间浪费。所以惰性删除策略对内存不友好。
定期删除策略 定期删除策略的做法是每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查并删除其中的过期key。
Redis 的定期删除的流程
1.从过期字典中随机抽取 20 个 key 2.检查这 20 个 key 是否过期并删除已过期的 key 3.如果本轮检查的已过期 key 的数量超过 5 个20/4也就是「已过期 key 的数量」占比「随机抽取 key 的数量」大于 25%则继续重复步骤 1如果已过期的 key 比例小于 25%则停止继续删除过期 key然后等待下一轮再检查
可以看到定期删除是一个循环的流程,我们知道redis是单进程单线程机制那 Redis 为了保证定期删除不会出现循环过度导致线程卡死现象为此增加了定期删除循环流程的时间上限默认不会超过 25ms。
定期删除的流程如下 定期删除策略优缺点 优点
通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响同时也能删除一部分过期的数据减少了过期键对空间的无效占用。缺点
难以确定删除操作执行的时长和频率。如果执行的太频繁就会对 CPU 不友好如果执行的太少那又和惰性删除一样了过期 key 占用的内存不会及时得到释放。