当前位置: 首页 > news >正文

建站公司塔山双喜推广业务平台

建站公司塔山双喜,推广业务平台,网站建设app开发合同,日本樱花服务器vpsRedis 中最核心的两个命令: set 作用:设置 key 对应的 value 值并存储进去。若key已包含一个值,则无论其类型如何,都会覆盖该值。在SET操作成功时,将丢弃与密钥相关联的任何先前生存时间。 对于上述这里的 key和val…

Redis 中最核心的两个命令:

set

作用:设置 key 对应的 value 值并存储进去。若key已包含一个值,则无论其类型如何,都会覆盖该值。在SET操作成功时,将丢弃与密钥相关联的任何先前生存时间。
在这里插入图片描述
对于上述这里的 key和value ,不需要加上引号,直接就是表示字符串的类型~~
当然,如果要是给 key 和 value 加上引号也是可以的(单引号或者双引号都可以)
redis 中的命令与mysql一致不区分大小写

get

作用:根据 key 来获取 value值
在这里插入图片描述
如果当前key不存在,那么返回 nil , 和 null / NULL一个意思
在这里插入图片描述

基本全局命令

在这里插入图片描述
Redis 有5种数据结构,但它们都是键值对这种的值,对于键来说有⼀些通⽤的命令。而全局命令,就是能够搭配任意一个数据结构来使用的命令~~

keys

作用:用来查询当前服务器上匹配的key
通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就能够被查询出来
返回所有满⾜样式(pattern)的key。⽀持如下统配样式。

  • h?llo 匹配 hello , hallo 和 hxllo ? 匹配任意一个字符
  • h*llo 匹配 hllo 和 heeeello *匹配0个或者多个任意字符
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo [abcde] 只能匹配到 a b c d e,别的不行,相当于给出了固定的选项了
  • h[^e]llo 匹配 hallo , hbllo,但不匹配 hello [^e] 排除e, 只有e 匹配不了,其他的都能匹配
  • h[a-b]llo 匹配 hallo 和 hbllo [a-b] 匹配 a - b 这个范围内的字符,包含两侧边界

语法: keys pattern
注意事项
keys 命令的时间复杂度是 O(N)
所以,在生产环境上,一般都会禁止使用keys命令。尤其是大杀器 keys *。
生产环境上的 key * 可能会非常多!而redis是一个单线程的服务器,执行keys *的时间非常长,就使得 redis 服务器被阻塞了,无法给其他客户端提供服务!

exists

作用:判断 key 是否存在。
语法:exists key [key ...]
返回值:key 存在的个数。
时间复杂度:O(N),这里的N不是总的 key 数量N,而是你索需要查询的 key 的个数,如果是查询的key个数为1个,那么就是O(1)
在这里插入图片描述

del

作用:删除指定的 key
语法:del key [key ...]
返回值:删除掉的 key 的个数
时间复杂度:O(N),这里的N不是总的key数量N,而是你查询的key的个数,如果是查询的key个数为1个,那么就是O(1)
在这里插入图片描述

expire

作用:是给指定的 key 设置过期时间,单位是秒
语法:EXPIRE key seconds
在这里插入图片描述
与其相对应的就是pexpire,它们之间的区别是设置的单位不同,pexpire设置过期时间单位是毫秒,expire单位是秒。

ttl

作用:获取指定key的过期时间,秒级
语法:TTL key
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。
在这里插入图片描述
与其相对应的是pttl,单位是毫秒。

type

作用:返回key对应的value类型
语法: TYPE key
返回值: none , string , list , set , zset , hash and stream等
在这里插入图片描述

redis 的key 的过期策略是什么实现的

一个redis 中可能同时存在很多很多key,这些 key中可能有很大一部分都有过期时间,此时,redis 服务器咋知道那些key 已经过期要被删除,那些key还没过期?
如果直接遍历所有的key,显然是行不通的,效率非常低~~
redis 整体的策略是:

  1. 定期删除:每次抽取一部分,进行验证过期时间~~
  2. 惰性删除:假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在,紧接这后面又有一次访问,正好用到了这个key,于是这次访问就会让redis服务器触发删除key的操作,同时再返回一个nil

虽然有了上述两种策略结合,整体的效果一般~~
仍然可能会有很多过期的 key 被残留了,没有及时删除掉~~
redis为了对上述进行补充,还提供了一系列的内存淘汰策略~~

在其他博主上能看到下图这样的机制:
在这里插入图片描述
其中定时删除是错误的,原因如下:
1.redis 中并没有采取 定时器 的方式来实现过期 key 删除。
2.如果有多个key 过期,也可以通过一个 定时器(可以是基于 优先级队列 或者 基于 时间轮 都可以实现比较高效的定时器) 来高效/节省cpu的前提下来处理多个key~

基于优先级队列定时器设计思路

正常的队列是先进先出,而优先级队列则是按照指定的优先级先出,例如c++ STL中的priority_queue一样。
那么啥叫优先级高呢?我们可以自定义,比如再 reids 过期 key 的场景中,就可以通过 “过期时间越早,就是优先级越高”

那么我们现在假定有很多 key 设置了过期时间,就可以把这些 key 加入到一个优先级队列中,指定优先级规则是过期时间早的先出队列,队首元素,就是最早的要过期的key

keyvalue
key112:00
key213:00
key314:00

此时定时器中只要分配一个线程,让这个线程去检查队首元素,看是否过期即可,如果队首元素还没过期,后续元素一定没过期!此时让 这个扫描线程不需要遍历所有的key只需要盯住队首元素即可。
另外再扫描线程检查队首元素过期时间的时候不能太频繁,此时做法就是可以根据当前时刻和队首元素的过期时间,让扫描线程进行等待,当时间到了,系统在去唤醒这个线程,此时扫描线程不需要高频扫描队首元素,把cpu的开销可以降低下来。
其中万一再线程休眠时,来了一个新的任务,是11.30要执行,那么可以再新任务添加进来的时候,先唤醒一下刚下的线程,并且重新检查一下队首元素,再根据时间差距重新调整阻塞时间即可。

基于时间轮实现的定时器思路

首先把时间划分程很多小段,假设每个单元格是100ms的间隔,当有新任务进来时,先找到要存储的单元格位置并存入,如果发现设置的时间超出对应时间轮一轮的范围只需要多旋转几轮直到找到即可,并且当每过100ms时,此时就需要检查当前格子上的每一个任务,并尝试看是否能执行当前任务。
在这里插入图片描述

http://www.shuangfujiaoyu.com/news/50745.html

相关文章:

  • o2o平台都有哪些seo网站推广助理
  • 虚拟主机网站建设过程企业seo关键词优化
  • 自己做网站什么网站比较好搜狗推广登陆
  • 平面设计和网站建设哪个好谷歌浏览器搜索入口
  • 购物网站建设代码推广软文代写
  • 做网站用的文本编辑器济南百度代理
  • 个人备案网站做淘宝客可以持续优化疫情防控举措
  • 河北近期又出现疫情了广东seo
  • 有那些网站域名解析查询工具
  • 宁波市网站建设黄石seo
  • wordpress手机认证登录页面模板seo推广具体做什么
  • 昆山科技网站建设论坛推广软件
  • 腾讯云 云服务器seo排名如何优化
  • wordpress主题 企业全域seo
  • 柳州城乡建设部网站首页短视频运营公司
  • 陕西咸阳做网站的公司seo网站推广与优化方案
  • 网站可视化设计什么网站可以发布广告
  • 携手并进合作共赢iseo赚钱
  • 网站内容建设运维服务苏州seo网站公司
  • 如何用万网做自己的网站win优化大师有免费版吗
  • 株洲网站建设兼职网络视频营销
  • 手机做任务赚钱的网站seo优化排名营销
  • 网站建设合同有效期网络营销类型
  • 在网站上使用特殊字体营销软件哪个好
  • 网站建设方案书是什么意思苏州关键词优化搜索排名
  • 丰功网站建设深圳网络推广培训
  • 摄影手机网站模板成都营销型网站制作
  • 卧龙区2015网站建设口碑seo排名关键词点击
  • 金种子酒业网站建设镇江seo
  • 网页游戏大全排行榜宁波百度seo排名优化