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

打开网站 磁盘空间不足如何重启网站服务器

打开网站 磁盘空间不足,如何重启网站服务器,wordpress手机验证码登录,网站asp设计作品绝大部分写业务的程序员#xff0c;在实际开发中使用 Redis 的时候#xff0c;只会 Set Value 和 Get Value 两个操作#xff0c;对 Redis 整体缺乏一个认知。这里对 Redis 常见问题做一个总结#xff0c;解决大家的知识盲点。 1、为什么使用 Redis 在项目中使用 Redis在实际开发中使用 Redis 的时候只会 Set Value 和 Get Value 两个操作对 Redis 整体缺乏一个认知。这里对 Redis 常见问题做一个总结解决大家的知识盲点。 1、为什么使用 Redis 在项目中使用 Redis主要考虑两个角度性能和并发。如果只是为了分布式锁这些其他功能还有其他中间件 Zookpeer 等代替并非一定要使用 Redis。 性能 如下图所示我们在碰到需要执行耗时特别久且结果不频繁变动的 SQL就特别适合将运行结果放入缓存。这样后面的请求就去缓存中读取使得请求能够迅速响应。 特别是在秒杀系统在同一时间几乎所有人都在点都在下单…..执行的是同一操作———向数据库查数据。 根据交互效果的不同响应时间没有固定标准。在理想状态下我们的页面跳转需要在瞬间解决对于页内操作则需要在刹那间解决。 并发 如下图所示在大并发的情况下所有的请求直接访问数据库数据库会出现连接异常。这个时候就需要使用 Redis 做一个缓冲操作让请求先访问到 Redis而不是直接访问数据库。 使用 Redis 的常见问题 缓存和数据库双写一致性问题缓存雪崩问题缓存击穿问题缓存的并发竞争问题 2、单线程的 Redis 为什么这么快 这个问题是对 Redis 内部机制的一个考察。很多人都不知道 Redis 是单线程工作模型。 原因主要是以下三点 纯内存操作单线程操作避免了频繁的上下文切换采用了非阻塞 I/O 多路复用机制 仔细说一说 I/O 多路复用机制打一个比方小名在 A 城开了一家快餐店店负责同城快餐服务。小明因为资金限制雇佣了一批配送员然后小曲发现资金不够了只够买一辆车送快递。 经营方式一 客户每下一份订单小明就让一个配送员盯着然后让人开车去送。慢慢的小曲就发现了这种经营方式存在下述问题 时间都花在了抢车上了大部分配送员都处在闲置状态抢到车才能去送。随着下单的增多配送员也越来越多小明发现快递店里越来越挤没办法雇佣新的配送员了。配送员之间的协调很花时间。 综合上述缺点小明痛定思痛提出了经营方式二。 经营方式二 小明只雇佣一个配送员。当客户下单小明按送达地点标注好依次放在一个地方。最后让配送员依次开着车去送送好了就回来拿下一个。上述两种经营方式对比很明显第二种效率更高。 在上述比喻中 每个配送员→每个线程每个订单→每个 Socket(I/O 流)订单的送达地点→Socket 的不同状态客户送餐请求→来自客户端的请求明曲的经营方式→服务端运行的代码一辆车→CPU 的核数 于是有了如下结论 经营方式一就是传统的并发模型每个 I/O 流(订单)都有一个新的线程(配送员)管理。经营方式二就是 I/O 多路复用。只有单个线程(一个配送员)通过跟踪每个 I/O 流的状态(每个配送员的送达地点)来管理多个 I/O 流。 下面类比到真实的 Redis 线程模型如图所示 Redis-client 在操作的时候会产生具有不同事件类型的 Socket。在服务端有一段 I/O 多路复用程序将其置入队列之中。然后文件事件分派器依次去队列中取转发到不同的事件处理器中。 3、Redis 的数据类型及使用场景 一个合格的程序员这五种类型都会用到。 String 最常规的 set/get 操作Value 可以是 String 也可以是数字。一般做一些复杂的计数功能的缓存。 Hash 这里 Value 存放的是结构化的对象比较方便的就是操作其中的某个字段。我在做单点登录的时候就是用这种数据结构存储用户信息以 CookieId 作为 Key设置 30 分钟为缓存过期时间能很好的模拟出类似 Session 的效果。 List 使用 List 的数据结构可以做简单的消息队列的功能。另外可以利用 lrange 命令做基于 Redis 的分页功能性能极佳用户体验好。 Set 因为 Set 堆放的是一堆不重复值的集合。所以可以做全局去重的功能。我们的系统一般都是集群部署使用 JVM 自带的 Set 比较麻烦。另外就是利用交集、并集、差集等操作可以计算共同喜好全部的喜好自己独有的喜好等功能。 Sorted Set Sorted Set 多了一个权重参数 Score集合中的元素能够按 Score 进行排列。可以做排行榜应用取 TOP N 操作。Sorted Set 可以用来做延时任务。 4、Redis 的过期策略和内存淘汰机制 Redis 是否用到家从这就能看出来。比如你 Redis 只能存 5G 数据可是你写了 10G那会删 5G 的数据。怎么删的这个问题思考过么 正解Redis 采用的是定期删除惰性删除策略。 为什么不用定时删除策略 定时删除用一个定时器来负责监视 Key过期则自动删除。虽然内存及时释放但是十分消耗 CPU 资源。在大并发请求下CPU 要将时间应用在处理请求而不是删除 Key因此没有采用这一策略。 定期删除惰性删除如何工作 定期删除Redis 默认每个 100ms 检查有过期 Key 则删除。需要说明的是Redis 不是每个 100ms 将所有的 Key 检查一次而是随机抽取进行检查。如果只采用定期删除策略会导致很多 Key 到时间没有删除。于是惰性删除派上用场。 采用定期删除惰性删除就没其他问题了么 不是的如果定期删除没删除掉 Key。并且你也没及时去请求 Key也就是说惰性删除也没生效。这样Redis 的内存会越来越高。那么就应该采用内存淘汰机制。 在 redis.conf 中有一行配置#nbsp;maxmemory-policynbsp;volatile-lru 该配置就是配内存淘汰策略的 noeviction当内存不足以容纳新写入数据时新写入操作会报错。allkeys-lru当内存不足以容纳新写入数据时在键空间中移除最近最少使用的 Key。推荐使用目前项目在用这种(最近最久使用算法)allkeys-random当内存不足以容纳新写入数据时在键空间中随机移除某个 Key。应该也没人用吧你不删最少使用 Key去随机删volatile-lru当内存不足以容纳新写入数据时在设置了过期时间的键空间中移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存又做持久化存储的时候才用。不推荐volatile-random当内存不足以容纳新写入数据时在设置了过期时间的键空间中随机移除某个 Key。依然不推荐volatile-ttl当内存不足以容纳新写入数据时在设置了过期时间的键空间中有更早过期时间的 Key 优先移除。不推荐 5、Redis 和数据库双写一致性问题 一致性问题还可以再分为最终一致性和强一致性。数据库和缓存双写就必然会存在不一致的问题。前提是如果对数据有强一致性要求不能放缓存。我们所做的一切只能保证最终一致性。 另外我们所做的方案从根本上来说只能降低不一致发生的概率。因此有强一致性要求的数据不能放缓存。首先采取正确更新策略先更新数据库再删缓存。其次因为可能存在删除缓存失败的问题提供一个补偿措施即可例如利用消息队列。 6、如何应对缓存穿透和缓存雪崩问题 这两个问题一般中小型传统软件企业很难碰到。如果有大并发的项目流量有几百万左右这两个问题一定要深刻考虑。缓存穿透即黑客故意去请求缓存中不存在的数据导致所有的请求都怼到数据库上从而数据库连接异常。 缓存穿透解决方案 利用互斥锁缓存失效的时候先去获得锁得到锁了再去请求数据库。没得到锁则休眠一段时间重试。采用异步更新策略无论 Key 是否取到值都直接返回。Value 值中维护一个缓存失效时间缓存如果过期异步起一个线程去读数据库更新缓存。需要做缓存预热(项目启动前先加载缓存)操作。提供一个能迅速判断请求是否有效的拦截机制比如利用布隆过滤器内部维护一系列合法有效的 Key。迅速判断出请求所携带的 Key 是否合法有效。如果不合法则直接返回。 缓存雪崩即缓存同一时间大面积的失效这个时候又来了一波请求结果请求都怼到数据库上从而导致数据库连接异常。 缓存雪崩解决方案 给缓存的失效时间加上一个随机值避免集体失效。使用互斥锁但是该方案吞吐量明显下降了。双缓存。我们有两个缓存缓存 A 和缓存 B。缓存 A 的失效时间为 20 分钟缓存 B 不设失效时间。自己做缓存预热操作。然后细分以下几个小点从缓存 A 读数据库有则直接返回A 没有数据直接从 B 读数据直接返回并且异步启动一个更新线程更新线程同时更新缓存 A 和缓存 B。 7、如何解决 Redis 的并发竞争 Key 问题 这个问题大致就是同时有多个子系统去 Set 一个 Key。这个时候要注意什么呢大家基本都是推荐用 Redis 事务机制。 但是我并不推荐使用 Redis 的事务机制。因为我们的生产环境基本都是 Redis 集群环境做了数据分片操作。你一个事务中有涉及到多个 Key 操作的时候这多个 Key 不一定都存储在同一个 redis-server 上。因此Redis 的事务机制十分鸡肋。 如果对这个 Key 操作不要求顺序 这种情况下准备一个分布式锁大家去抢锁抢到锁就做 set 操作即可比较简单。 如果对这个 Key 操作要求顺序 假设有一个 key1系统 A 需要将 key1 设置为 valueA系统 B 需要将 key1 设置为 valueB系统 C 需要将 key1 设置为 valueC。 期望按照 key1 的 value 值按照 valueA valueB valueC 的顺序变化。这种时候我们在数据写入数据库的时候需要保存一个时间戳。 假设时间戳如下 系统 A key 1 {valueA 3:00}系统 B key 1 {valueB 3:05}系统 C key 1 {valueC 3:10} 那么假设系统 B 先抢到锁将 key1 设置为{valueB 3:05}。接下来系统 A 抢到锁发现自己的 valueA 的时间戳早于缓存中的时间戳那就不做 set 操作了以此类推。其他方法比如利用队列将 set 方法变成串行访问也可以。 8、总结 Redis 在国内各大公司都能看到其身影比如我们熟悉的新浪阿里腾讯百度美团小米等。学习 Redis这几方面尤其重要Redis 客户端、Redis 高级功能、Redis 持久化和开发运维常用问题探讨、Redis 复制的原理和优化策略、Redis 分布式解决方案等。
http://www.dnsts.com.cn/news/58380.html

相关文章:

  • 如何做网站wordpress获取文章评论数
  • 机械网站建设比较好的合肥房产网365
  • 北京建设银行对公网站荣添创意网站建设
  • 学校网站建设目的与意义长沙装修公司口碑哪家好
  • 有教人做衣服的网站给wordpress网站做ssl卸载
  • 哈尔滨大连工程建设信息网站太原做手机网站设计
  • 部门网站建设管理办法汕头网页制作公司
  • 如何做淘宝网站学校网站建设及使用
  • 官方网站建设的重要性wordpress 仿 主题
  • 国内jsp网站有哪些做公司网站的总结
  • 万网个人网站网站如何接入支付宝
  • 广州可信网站认证服务器wordpress滑动图片轮播
  • 网站开发业务规划丹徒网站建设信息
  • 鲜花网站开发wordpress无广告视频网站
  • 网站管理机制建设情况长沙网页设计公司网站
  • 优化网站做内链接老榕树智能建站软件
  • 上饶有哪些做网站的店苏州设计工作室
  • 中文网站外链查询工具安徽网络营销推广
  • 手机网站被禁止访问怎么打开WordPress自定义icon
  • 石家庄建站模板搭建wordpress怎么修改图片
  • 遵义做网站哪家好建立网站顺序
  • 制作网站企业才艺多网站建设平台
  • 安徽品质网站建设创新wordpress根据用户名生成头像
  • aspcms手机网站插件建瓯企业网站建设
  • 做盗版音乐网站海淀
  • 辽宁城乡建设集团网站素材网站哪个最好
  • 公司做网站有什么用旅游门户网站模板下载
  • 环保h5微网站wordpress按分类显示图片
  • 如何查看网站是不是wordpresswordpress 整主题设置页
  • 大米网站模板设计logo网站生成器