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

建筑设计网站免费响应式旅行社展业网站开发调研报告

建筑设计网站免费,响应式旅行社展业网站开发调研报告,网络网站建设价格,如何制作一个微信刷题小程序1. 内存淘汰策略 noeviction#xff1a;当内存不足以容纳新写入数据时#xff0c;新写入操作会报错allkeys-lru#xff1a;当内存不足以容纳新写入数据时#xff0c;在键空间中#xff0c;移除近少使用的key。(这个是最常用的)allkeys-random#xff1a;当内存不足以容纳…1. 内存淘汰策略 noeviction当内存不足以容纳新写入数据时新写入操作会报错allkeys-lru当内存不足以容纳新写入数据时在键空间中移除近少使用的key。(这个是最常用的)allkeys-random当内存不足以容纳新写入数据时在键空间中随机移除某个key。volatile-lru当内存不足以容纳新写入数据时在设置了过期时间的键空间中移除近少使用的key。volatile-random当内存不足以容纳新写入数据时在设置了过期时间的键空间中随机移除某个key。volatile-ttl当内存不足以容纳新写入数据时在设置了过期时间的键空间中有更早过期时间的key优先移除。 2. Redis集群有16384个哈希槽 3. redis缓存雪崩缓存击穿缓存穿透是什么怎么解决 缓存雪崩 指缓存同一时间大面积的失效所以后面的请求都会落到数据库上造成数据库短时间内承受大量请求而崩掉。 解决方案 缓存数据的过期时间设置随机防止同一时间大量数据过期现象发生。一般并发量不是特别多的时候使用多的解决方案是加锁排队。给每一个缓存数据增加相应的缓存标记记录缓存的是否失效如果缓存标记失效则更新数据缓存。 缓存穿透 缓存穿透是指缓存和数据库中都没有的数据导致所有的请求都落到数据库上造成数据库短时间内承受大量请求而崩掉。 解决方案 接口层增加校验如用户鉴权校验id做基础校验id0的直接拦截;从缓存取不到的数据在数据库中也没有取到这时也可以将key-value对写为key-null缓存有效时间可以设置短点如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击采用布隆过滤器将所有可能存在的数据哈希到一个足够大的 bitmap 中一个一定不存在的数据会被这个 bitmap 拦截掉从而避免了对底层存储系统的查询压力附加。 Bloom-Filter算法的核心思想就是利用多个不同的Hash函数来解决“冲突”。Hash存在一个冲突(碰撞)的问题用同一个Hash得到的两个URL的值有可能相同。为了减少冲突我们可以多引入几个Hash如果通过其中的一个Hash值我们得出某元素不 在集合中那么该元素肯定不在集合中。只有在所有的Hash函数告诉我们该元素在集合中时才能确定该元素存在于集合中。这便是 Bloom-Filter的基本思想。 Bloom-Filter一般用于在大数据量的集合中判定某元素是否存在。 缓存击穿 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期)这时由于并发用户特别多同时读缓存没读到数据又同时去数据库去取数据引起数据库压力瞬间增大造成过大压力。和缓存雪崩不同的是缓存击穿指并发查同一条数据缓存雪崩是不同数据都过期了很多数据都查不到从而查数据库。 解决方案 设置热点数据永远不过期。加互斥锁互斥锁缓存预热。 缓存预热就是系统上线后将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候先查询数据库然后再将数据缓存的问题。用户直接查询事先被预热的缓存数据!解决方案 直接写个缓存刷新页面上线时手工操作一下;数据量不大可以在项目启动的时候自动进行加载;定时刷新缓存; 缓存降级 当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时仍然需要保证服务还是可用的即使是有损服务。系统可以根据一些关键数据进行自动降级也可以配置开关实现人工降级。 缓存降级的终目的是保证核心服务可用即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。 在进行降级之前要对系统进行梳理看看系统是不是可以丢卒保帅;从而梳理出哪些必须誓死保护哪些可降级;比如可以参考日志级别设置预案: 一般比如有些服务偶尔因为网络抖动或者服务正在上线而超时可以自动降级;警告有些服务在一段时间内成功率有波动(如在95~100%之间)可以自动降级或人工降级并发送告警;错误比如可用率低于90%或者数据库连接池被打爆了或者访问量突然猛增到系统能承受的大阀值此时可以根据情况自动降级或者人工降级;严重错误比如因为特殊原因数据错误了此时需要紧急人工降级。 服务降级的目的是为了防止Redis服务故障导致数据库跟着一起发生雪崩问题。因此对于不重要的缓存数据可以采取服务降级策略例如一个比较常见的做法就是 Redis出现问题不去数据库查询而是直接返回默认值给用户。 热点数据和冷数据 4. redis 数据类型 字符串一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。散列表散列类型不能嵌套其他数据类型。一个散列类型键最多可以包含2的32次方-1个字段。列表列表内部使用的是双向链表(double linked list)实现的所以向列表两端添加元素的时间复杂度是O(1),获取越接近列表两端的元素的速度越快。但是缺点是使用列表通过索引访问元素的效率太低(需要从端点开始遍历元素)。集合集合中每个元素都是不同的集合中的元素个数最多为2的32次方-1个集合中的元素是没有顺序的。有序集合有序集合使用散列表和跳跃表实现即使读取位于中间部分的数据也很快时间复杂度为O(log(N))有序集合比列表更费内存。 5. 跳跃表 Redis只在两个地方用到了跳跃表一个是实现有序集合键另一个是在集群结点中用作内部数据结构 原理 跳跃表在redis中主要是有序表的一种底层实现。对于普通链表的查找即使有序我们也不能使用二分法需要从头开始一个一个找时间复杂度为O(n)。而对于跳跃表从名字可以看出跳跃表的优势就在于可以跳跃。如何做到呢?在于其特殊的层设计。比如我们查找46普通链表只能从头开始查找比对-3,2,17…直到46要比对7次。但是对于跳 跃表我们可以从最高层开始查找: 第一步:在L4层直接与55比对发现大了退回到第3层 第二步:在L3层与21比对发现小了继续往前比对55发现大了退回到第二层 第三步:在L2层与37比对发现小了往前与55比对发现大了退回到第一层 第四步:在第1层与46比对查找成功。 跳表具有如下性质 由很多层结构组成每一层都是一个有序的链表最底层(Level 1)的链表包含所有元素如果一个元素出现在 Level i 的链表中则它在 Level i 之下的链表也都会出现每个节点包含两个指针一个指向同一链表中的下一个元素一个指向下面一层的元素。 redis为啥使用跳表作为索引不使用B树 因为B树的原理是叶子节点存储数据非叶子节点存储索引B树的每个节点可以存储多个关键字它将节点大小设置为磁盘页的大小充分利用了磁盘预读的功能。每次读取磁盘页时就会读取一整个节点,每个叶子节点还有指向前后节点的指针为的是最大限度的降低磁盘的IO;因为数据在内存中读取耗费的时间是从磁盘的IO读取的百万分之一 而Redis是内存中读取数据不涉及IO因此使用了跳表 6. Redis key的过期时间和永久有效分别怎么设置? EXPIRE和PERSIST命令。 7. 集群 同步方法 全同步。全同步是第一次从机连主机是进行的同步主机会生成一个RDB文件给从机然后从机加载该文件。 并且如果从机掉线时间很长时也会触发这个同步掉线时间短时使用另外的策略部分同步。当主机收到修改命令之后会把命令发给从机进行部分同步。 这里会有一个缓存区主要是用来如果有从机掉线再次连接的时候会优先使用缓存区中的数据进行同步是在不行才使用全同步 8. 消息中间件如何保证消息的一致性 主动方应用先把消息发送给消息中间件消息状态标记为待确认;消息中间件收到消息之后把消息持久化到消息存储中但并不向被动方应用投递消息;消息中间件返回消息持久化结果(成功或者失效)主动方应用根据返回结果进行判断如何处理业务操作处理; 失败放弃业务操作处理结束(必须向上层返回失败结果)成功执行业务操作处理 业务操作完成后把业务操作结果(成功/失败)发送给消息中间件;消息中间件收到业务操作结果后根据结果进行处理; 失败删除消息存储中的消息结束;成功更新消息存储中的消息状态为∙待发送(可发送)∙紧接着执行消息投递; 前面的正向流程都成功后向被动方应用投递消息; 9. 哨兵模式 10. 事务 三个阶段 事务开始 MULTI命令入队事务执行 EXEC 事务执行过程中如果服务端收到有EXEC、DISCARD、WATCH、MULTI之外的请求将会把请求放入队列中排队 Redis会将一个事务中的所有命令序列化然后按顺序执行。 redis 不支持回滚“Redis 在事务失败时不进行回滚而是继续执行余下的命令” 所以 Redis 的内部可以保持简单且快速。如果在一个事务中的命令出现错误那么所有的命令都不会执行;如果在一个事务中出现运行错误那么正确的命令会被执行。 WATCH 命令是一个乐观锁可以为 Redis 事务提供 check-and-set (CAS)行为。 可以监控一个或多个键一旦其中有一个键被修改(或删除)之后的事务就不会执行监 控一直持续到EXEC命令。 MULTI命令用于开启一个事务它总是返回OK。 MULTI执行之后客户端可以继续向服务器发送任意多条命令这些命令不会立即被执行而是被放到一个队列中当EXEC命令被调用时所有队列中的命令才会被执行。 EXEC执行所有事务块内的命令。返回事务块内所有命令的返回值按命令执行的先后顺序排列。 当操作被打断时返回空值null。 通过调用DISCARD客户端可以清空事务队列并放弃执行事务并且客户端会从事务状态中退出。 Redis 是单进程程序并且它保证在执行事务时不会对事务进行中断事务可以运行直到执行完所有事务队列中的命令为止。因此Redis 的事务是总是带有隔离性的。 11. 如何保证缓存与数据库双写时的数据一致性 先写数据库再写缓存。写数据库成功但写缓存失败则先读数据库再回写缓存
http://www.zqtcl.cn/news/361503/

相关文章:

  • 烟台商城网站建设怎么样引流顾客到店方法
  • 北京做网站公司的排名python基础教程pdf
  • 网站建设为什么学flash建设工程询价网站有哪些
  • 网站内容建设机制企业管理模式有哪些
  • 中山网站建设文化价格建网站域名注册
  • 手机电影网站怎么做大连最新发布
  • 珠三角网站建设网页制作专业知识
  • 罗湖微信网站制作深圳做网站哪个公司最好
  • ps如何做ppt模板下载网站网站模板分类
  • 网站建设在线网站服务器和直播服务器一样吗
  • iapp网站做软件教程朋友圈广告投放平台
  • 优门设 网站网站代理 正规备案
  • 衡水做wap网站上海做网站吧
  • seo推广思路seo线下培训班
  • 没有备案的网站怎么做淘宝客html5开发手机网站
  • 酒店旅游团购网站建设推广普通话实践总结
  • 基本的网站开发技术路线建设网站的好处有哪些
  • 网站排行怎么做wordpress all in one seo插件
  • 河北特定网站建设推荐wordpress添加vip用户组
  • 北京商城网站建设地址asp.net网站开发 pdf
  • 如何用网页制作网站龙岩门户网站
  • 中国建设银行官网站下载建设网站弹出后加载不进去
  • 广告网站制作多少钱建设工程合同甲方
  • 一号网站建设誉重网站建设
  • 网站seo优化查询网站开发最合适的搭配
  • 做文员的网站知乎qq小程序怎么打开
  • 网站外链建设分析wordpress生成验证码发送代码
  • 网站设计与制作的过程珠海网站建设 旭洁科技
  • 网站建设项目经费的报告轻创网
  • 青岛网站建设制作软件开发培训学校排行