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

网站里添加百度地图网站报名照片怎么做

网站里添加百度地图,网站报名照片怎么做,免费域名注册发卡网,坚决贯彻落实二十条优化措施1. 说说Redis基本数据类型有哪些吧 字符串#xff1a;redis没有直接使用C语言传统的字符串表示#xff0c;而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息#xff0c;而SDS则保存了长度信息#xff0c;这样将获取字符串长度的时间由O(…  1. 说说Redis基本数据类型有哪些吧 字符串redis没有直接使用C语言传统的字符串表示而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息而SDS则保存了长度信息这样将获取字符串长度的时间由O(N)降低到了O(1)同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 链表linkedlistredis链表是一个双向无环链表结构很多发布订阅、慢查询、监视器功能都是使用到了链表来实现每个链表的节点由一个listNode结构来表示每个节点都有指向前置节点和后置节点的指针同时表头节点的前置和后置节点都指向NULL。 字典hashtable用于保存键值对的抽象数据结构。redis使用hash表作为底层实现每个字典带有两个hash表供平时使用和rehash时使用hash表使用链地址法来解决键冲突被分配到同一个索引位置的多个键值对会形成一个单向链表在对hash表进行扩容或者缩容的时候为了服务的可用性rehash的过程不是一次性完成的而是渐进式的。 跳跃表skiplist跳跃表是有序集合的底层实现之一redis中在实现有序集合键和集群节点的内部结构中都是用到了跳跃表。redis跳跃表由zskiplist和zskiplistNode组成zskiplist用于保存跳跃表信息表头、表尾节点、长度等zskiplistNode用于表示表跳跃节点每个跳跃表的层高都是1-32的随机数在同一个跳跃表中多个节点可以包含相同的分值但是每个节点的成员对象必须是唯一的节点按照分值大小排序如果分值相同则按照成员对象的大小排序。 整数集合intset用于保存整数值的集合抽象数据结构不会出现重复元素底层实现为数组。 压缩列表ziplist压缩列表是为节约内存而开发的顺序性数据结构他可以包含多个节点每个节点可以保存一个字节数组或者整数值。 基于这些基础的数据结构redis封装了自己的对象系统包含字符串对象string、列表对象list、哈希对象hash、集合对象set、有序集合对象zset每种对象都用到了至少一种基础的数据结构。 redis通过encoding属性设置对象的编码形式来提升灵活性和效率基于不同的场景redis会自动做出优化。不同对象的编码如下 字符串对象stringint整数、embstr编码的简单动态字符串、raw简单动态字符串 列表对象listziplist、linkedlist 哈希对象hashziplist、hashtable 集合对象setintset、hashtable 有序集合对象zsetziplist、skiplist 2. Redis为什么快呢 redis的速度非常的快单机的redis就可以支撑每秒10几万的并发相对于mysql来说性能是mysql的几十倍。速度快的原因主要有几点 完全基于内存操作 C语言实现优化过的数据结构基于几种基础的数据结构redis做了大量的优化性能极高 使用单线程无上下文的切换成本 基于非阻塞的IO多路复用机制 3. 那为什么Redis6.0之后又改用多线程呢? redis使用多线程并非是完全摒弃单线程redis还是使用单线程模型来处理客户端的请求只是使用多线程来处理数据的读写和协议解析执行命令还是使用单线程。 这样做的目的是因为redis的性能瓶颈在于网络IO而非CPU使用多线程能提升IO读写的效率从而整体提高redis的性能。 4. 知道什么是热key吗热key问题怎么解决 所谓热key问题就是突然有几十万的请求去访问redis上的某个特定key那么这样会造成流量过于集中达到物理网卡上限从而导致这台redis的服务器宕机引发雪崩。 针对热key的解决方案 提前把热key打散到不同的服务器降低压力 加入二级缓存提前加载热key数据到内存中如果redis宕机走内存查询 5. 什么是缓存击穿、缓存穿透、缓存雪崩 缓存击穿 缓存击穿的概念就是单个key并发访问过高过期时导致所有请求直接打到db上这个和热key的问题比较类似只是说的点在于过期导致请求全部打到DB上而已。 解决方案 加锁更新比如请求查询A发现缓存中没有对A这个key加锁同时去数据库查询数据写入缓存再返回给用户这样后面的请求就可以从缓存中拿到数据了。 将过期时间组合写在value中通过异步的方式不断的刷新过期时间防止此类现象。 缓存穿透 缓存穿透是指查询不存在缓存中的数据每次请求都会打到DB就像缓存不存在一样。 针对这个问题加一层布隆过滤器。布隆过滤器的原理是在你存入数据的时候会通过散列函数将它映射为一个位数组中的K个点同时把他们置为1。 这样当用户再次来查询A而A在布隆过滤器值为0直接返回就不会产生击穿请求打到DB了。 显然使用布隆过滤器之后会有一个问题就是误判因为它本身是一个数组可能会有多个值落到同一个位置那么理论上来说只要我们的数组长度够长误判的概率就会越低这种问题就根据实际情况来就好了。 缓存雪崩 当某一时刻发生大规模的缓存失效的情况比如你的缓存服务宕机了会有大量的请求进来直接打到DB上这样可能导致整个系统的崩溃称为雪崩。雪崩和击穿、热key的问题不太一样的是他是指大规模的缓存都过期失效了。 针对雪崩几个解决方案 针对不同key设置不同的过期时间避免同时过期 限流如果redis宕机可以限流避免同时刻大量请求打崩DB 二级缓存同热key的方案。 6. Redis的过期策略有哪些 redis主要有2种过期删除策略 惰性删除 惰性删除指的是当我们查询key的时候才对key进行检测如果已经达到过期时间则删除。显然他有一个缺点就是如果这些过期的key没有被访问那么他就一直无法被删除而且一直占用内存。 定期删除 定期删除指的是redis每隔一段时间对数据库做一次检查删除里面的过期key。由于不可能对所有key去做轮询来删除所以redis会每次随机取一些key去做检查和删除。 7. 那么定期惰性都没有删除过期的key怎么办 假设redis每次定期随机查询key的时候没有删掉这些key也没有做查询的话就会导致这些key一直保存在redis里面无法被删除这时候就会走到redis的内存淘汰机制。 volatile-lru从已设置过期时间的key中移出最近最少使用的key进行淘汰 volatile-ttl从已设置过期时间的key中移出将要过期的key volatile-random从已设置过期时间的key中随机选择key淘汰 allkeys-lru从key中选择最近最少使用的进行淘汰 allkeys-random从key中随机选择key进行淘汰 noeviction当内存达到阈值的时候新写入操作报错 8. 持久化方式有哪些有什么区别 redis持久化方案分为RDB和AOF两种。 RDB RDB持久化可以手动执行也可以根据配置定期执行它的作用是将某个时间点上的数据库状态保存到RDB文件中RDB文件是一个压缩的二进制文件通过它可以还原某个时刻数据库的状态。由于RDB文件是保存在硬盘上的所以即使redis崩溃或者退出只要RDB文件存在就可以用它来恢复还原数据库的状态。 可以通过SAVE或者BGSAVE来生成RDB文件。 SAVE命令会阻塞redis进程直到RDB文件生成完毕在进程阻塞期间redis不能处理任何命令请求这显然是不合适的。 BGSAVE则是会fork出一个子进程然后由子进程去负责生成RDB文件父进程还可以继续处理命令请求不会阻塞进程。 AOF AOF和RDB不同AOF是通过保存redis服务器所执行的写命令来记录数据库状态的。 AOF通过追加、写入、同步三个步骤来实现持久化机制。 当AOF持久化处于激活状态服务器执行完写命令之后写命令将会被追加append到aof_buf缓冲区的末尾 在服务器每结束一个事件循环之前将会调用flushAppendOnlyFile函数决定是否要将aof_buf的内容保存到AOF文件中可以通过配置appendfsync来决定。 always ##aof_buf内容写入并同步到AOF文件 everysec ##将aof_buf中内容写入到AOF文件如果上次同步AOF文件时间距离现在超过1秒则再次对AOF文件进行同步 no ##将aof_buf内容写入AOF文件但是并不对AOF文件进行同步同步时间由操作系统决定 如果不设置默认选项将会是everysec因为always来说虽然最安全只会丢失一次事件循环的写命令但是性能较差而everysec模式只不过会可能丢失1秒钟的数据而no模式的效率和everysec相仿但是会丢失上次同步AOF文件之后的所有写命令数据。 9. 怎么实现Redis的高可用 要想实现高可用一台机器肯定是不够的而redis要保证高可用有2个可选方案。 主从架构 主从模式是最简单的实现高可用的方案核心就是主从同步。主从同步的原理如下 slave发送sync命令到master master收到sync之后执行bgsave生成RDB全量文件 master把slave的写命令记录到缓存 bgsave执行完毕之后发送RDB文件到slaveslave执行 master发送缓存中的写命令到slaveslave执行 这里我写的这个命令是sync但是在redis2.8版本之后已经使用psync来替代sync了原因是sync命令非常消耗系统资源而psync的效率更高。 哨兵 基于主从方案的缺点还是很明显的假设master宕机那么就不能写入数据那么slave也就失去了作用整个架构就不可用了除非你手动切换主要原因就是因为没有自动故障转移机制。而哨兵(sentinel)的功能比单纯的主从架构全面的多了它具备自动故障转移、集群监控、消息通知等功能。 哨兵可以同时监视多个主从服务器并且在被监视的master下线时自动将某个slave提升为master然后由新的master继续接收命令。整个过程如下 初始化sentinel将普通的redis代码替换成sentinel专用代码 初始化masters字典和服务器信息服务器信息主要保存ip:port并记录实例的地址和ID 创建和master的两个连接命令连接和订阅连接并且订阅sentinel:hello频道 每隔10秒向master发送info命令获取master和它下面所有slave的当前信息 当发现master有新的slave之后sentinel和新的slave同样建立两个连接同时每个10秒发送info命令更新master信息 sentinel每隔1秒向所有服务器发送ping命令如果某台服务器在配置的响应时间内连续返回无效回复将会被标记为下线状态 选举出领头sentinel领头sentinel需要半数以上的sentinel同意 领头sentinel从已下线的的master所有slave中挑选一个将其转换为master 让所有的slave改为从新的master复制数据 将原来的master设置为新的master的从服务器当原来master重新回复连接时就变成了新master的从服务器 sentinel会每隔1秒向所有实例包括主从服务器和其他sentinel发送ping命令并且根据回复判断是否已经下线这种方式叫做主观下线。当判断为主观下线时就会向其他监视的sentinel询问如果超过半数的投票认为已经是下线状态则会标记为客观下线状态同时触发故障转移。 10. 能说说redis集群的原理吗 如果说依靠哨兵可以实现redis的高可用如果还想在支持高并发同时容纳海量的数据那就需要redis集群。redis集群是redis提供的分布式数据存储方案集群通过数据分片sharding来进行数据的共享同时提供复制和故障转移的功能。 节点 一个redis集群由多个节点node组成而多个node之间通过cluster meet命令来进行连接节点的握手过程 节点A收到客户端的cluster meet命令 A根据收到的IP地址和端口号向B发送一条meet消息 节点B收到meet消息返回pong A知道B收到了meet消息返回一条ping消息握手成功 最后节点A将会通过gossip协议把节点B的信息传播给集群中的其他节点其他节点也将和B进行握手 槽slot redis通过集群分片的形式来保存数据整个集群数据库被分为16384个slot集群中的每个节点可以处理0-16384个slot当数据库16384个slot都有节点在处理时集群处于上线状态反之只要有一个slot没有得到处理都会处理下线状态。通过cluster addslots命令可以将slot指派给对应节点处理。 slot是一个位数组数组的长度是16384/82048而数组的每一位用1表示被节点处理0表示不处理如图所示的话表示A节点处理0-7的slot。 当客户端向节点发送命令如果刚好找到slot属于当前节点那么节点就执行命令反之则会返回一个MOVED命令到客户端指引客户端转向正确的节点。MOVED过程是自动的 如果增加或者移出节点对于slot的重新分配也是非常方便的redis提供了工具帮助实现slot的迁移整个过程是完全在线的不需要停止服务。 故障转移 如果节点A向节点B发送ping消息节点B没有在规定的时间内响应pong那么节点A会标记节点B为pfail疑似下线状态同时把B的状态通过消息的形式发送给其他节点如果超过半数以上的节点都标记B为pfail状态B就会被标记为fail下线状态此时将会发生故障转移优先从复制数据较多的从节点选择一个成为主节点并且接管下线节点的slot整个过程和哨兵非常类似都是基于Raft协议做选举。 11. 了解Redis事务机制吗 redis通过MULTI、EXEC、WATCH等命令来实现事务机制事务执行过程将一系列多个命令按照顺序一次性执行并且在执行期间事务不会被中断也不会去执行客户端的其他请求直到所有命令执行完毕。事务的执行过程如下 服务端收到客户端请求事务以MULTI开始 如果客户端正处于事务状态则会把事务放入队列同时返回给客户端QUEUED反之则直接执行这个命令 当收到客户端EXEC命令时WATCH命令监视整个事务中的key是否有被修改如果有则返回空回复到客户端表示失败否则redis会遍历整个事务队列执行队列中保存的所有命令最后返回结果给客户端 WATCH的机制本身是一个CAS的机制被监视的key会被保存到一个链表中如果某个key被修改那么REDIS_DIRTY_CAS标志将会被打开这时服务器会拒绝执行事务。
http://www.yutouwan.com/news/15190/

相关文章:

  • 公司云网站建设国内顶尖设计椅子图片
  • 网页制作制作网站品牌vi升级设计
  • 怎么把网站放到服务器上大连html5网站建设价格
  • 延边网站建设我做动作你来猜的网站
  • 镇江网站设计建设深圳网站制作公司嘉兴
  • 网站开发结课大作业网上购物商城数据库设计
  • 目录网站开发so域名网站
  • 茂名网站建设电话域名购买 网站建设
  • 如何制作个人手机网站怎么注册公司名
  • 移动电商网站建设网站都有什么功能
  • 郑州定制网站建设制作类似网站软件
  • 卫生网站建设方案wordpress id 连续
  • 广西平台网站建设报价优惠做网站
  • 西湖专业网站设计公司私人做网站收费
  • 保定信息平台网站建设上海著名的网站制作公司
  • 外军网站建设广东住房和城乡建设厅官网
  • 专业做网站关键词排名下掉wordpress禁止适应屏幕
  • 网站大气模板如何做网站广告图片
  • 国外视觉差网站天津项目网站建设
  • 医疗网站建设怎么样自己做视频网站收益怎么来
  • 网站开发及维护费用西安网络整合营销
  • 网站怎么做网站地图哪里有手机网站制作公司
  • 怎样利用云盘做电影网站凡客诚品盈利模式
  • 做兼职在什么网站找比较好帮人做网站一定要先收费
  • 手机版网站设计页面设计简单吗
  • 个人网站做淘宝客违规深圳网站设计收费标准
  • 青岛即墨网站建设设计用dw怎么做网站后台
  • 多语言企业网站免费网站软件正能量
  • 广州一起做网店属于什么网站住建培训平台
  • 腾讯云快速建站北京网站建设价格天