(一)redis技术的使用:

redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动。。。

redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。

为什么redis的地位越来越高,我们为何不选择memcache,这是因为memcache只能存储字符串,而redis存储类型很丰富(例如有字符串、LIST、SET等),memcache每个值最大只能存储1M,存储资源非常有限,十分消耗内存资源,而redis可以存储1G,最重要的是memcache它不如redis安全,当服务器发生故障或者意外关机等情况时,redsi会把内存中的数据备份到硬盘中,而memcache所存储的东西全部丢失;这也说明了memcache不适合做数据库来用,可以用来做缓存。

下面用redis解决瞬间秒杀活动来说明:

下面这个程序模拟了20w人一瞬间涌入这个页面进行秒杀,能够秒杀成功的只有500人,我们把先进来的用户放入redis队列中,当队列中的用户达到500时,后来用户就转到秒杀结束页面。这里用随机数来表示不同的用户。

这里我们可以看到秒杀成功的第一个用户的id是208522,秒杀成功的最后一个用户是176260,参与秒杀人数总共是20w。(让大家注意这些的原因是为了验证下面的准确性)。

接下来我们依次从队列中把秒杀成功的500个用户取出来并观察第一个用户和最后一个用户是否跟之前的记录值一样

我们可以看到从秒杀成功队列中依次取出的第一个用户id是208522,最后一个用户是176260,可以看出结果是很准确的。

redis在解决高并发这方面的能力是真的挺不错的。

(二)Redis高并发可能产生的问题,解决:

1、 如果redis宕机了,或者链接不上,怎么办?

解决方法:

①配置主从复制,配置哨兵模式(相当于古代门派的长老级别可以选择掌门人的权利),一旦发现主机宕机,让下一个从机当做主机。

②如果最坏的情况,只能关闭Redis连接,去往数据库连接。但由于数据量大,这样SQL数据库也会宕掉的。

2、 如果redis缓存在高峰期到期失效,在这个时刻请求会向雪崩一样,直接访问数据库如何处理?

设置条件查询判断,判断redis缓存里是否有数据,如果没有,则去往数据库连接。当然要加分布式锁,利用redis的单线程+多路IO复用技术,原子性原理,让其它的线程请求等待,假若第一个线程进去获取到分布式锁在查询数据的途中宕掉了,不能让其它线程一直等待,设置等待一定时间判断是否取回数据,如果没有,递归调用自己的方法让第二个线程继续拿分布式锁查询数据库。当第二个锁从数据库拿到数据时,把数据值设置到redis数据库缓存中,设置失效时间,避免占内存,方便使用提高效率。

3. 如果用户不停地查询一条不存在的数据,缓存没有,数据库也没有,那么会出现什么

如果数据不存在,缓存中没有,数据库也没有,当然如果不设置判断,会一直调用数据库,使数据库效率降低,访问量大时甚至会宕机。

解决方案:从数据库查询,如果数据库没有,则返回值为Null,判断数据库返回的值,如果为Null,则自定义把标识的字段存到Redis中,用key,value的方法,jedis.setex(key,"empty"),设置失效时间跟具体情况而定,然后调用String json=jedis.get(key),判断是否获取的值"empty".equal(json),如果相等,则抛出自定义异常,给用户提示,或者直接return null。这样用户再次查询的时候由于先从reids缓存中查询,redis会有对应的Key获取之前设置的value值,这样就不会再次调用数据库,影响效率等问题。

具体代码如下:

@Override

redis的缺点有哪些?

是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

redis的缺点有哪些?
是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

gin redis 链接不上_Redis 高并发问题,及解决方案!相关推荐

  1. gin redis 链接不上_Redis通俗易懂丶 - 夜雨秋池

    兴趣是最好的老师! 欣赏狂神:在外面做自己喜欢的事情,就算吃不饱饭,不愿意打工! 之前的感悟:打工仔只是创业者的衍生物丶 NoSQL概述 架构师有一个套路:什么东西都加一个中间层 数据库解决方案 ca ...

  2. gin redis 链接不上_php + redis 高并发商品秒杀 完整业务模拟流程 实现方案

    关于商品秒杀 之前百度了很多关于商品秒杀的业务怎么做,网上的答案真的是五花八门,归纳一下就两种方式 队列或计数器 网上大部分都没有写具体的代码业务 我这里模拟一个业务小场景进行实践 商品:1 每日限量 ...

  3. gin redis 链接不上_自然的风味,GIN 在杯中

    在墨尔本 | 创造专属奢华体验 | | | GRAND HYATT MELBOURNE  电影<卡萨布兰卡>剧照 Of all the gin joints, in all the tow ...

  4. windows redis 客户端_redis高并发的最佳解决方案

    1.redis概述 redis是一个开源的,先进的 key-value 存储可用于构建高性能的存储解决方案.它支持数据结构有字符串,哈希,列表,集合,带有范围查询的排序集,位图,超文本和具有半径查询的 ...

  5. gin redis 链接不上_内存优化,Redis是如何实现的!

    点击上方"小罗技术笔记",关注公众号 第一时间送达实用干货 各位朋友新年开工好,今年由于特殊情况好多小伙伴今天在家开启远程办公模式(一直很向往),不过在这真想吐槽一下现有的远程办公 ...

  6. 缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

    缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis ...

  7. 万字干货 | Python后台开发的高并发场景优化解决方案

    嘉宾 | 黄思涵 来源 | AI科技大本营在线公开课 互联网发展到今天,规模变得越来越大,也对所有的后端服务提出了更高的要求.在平时的工作中,我们或多或少都遇到过服务器压力过大问题.针对该问题,本次公 ...

  8. php大流量网站解决,PHP 大型网站 高并发大流量解决方案

    标签:htm   指定   配置   热备   耗资源   负载均衡集群   session管理   redis   mod 网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验 ...

  9. 阿里P8架构师谈:高并发与多线程的关系、区别、以及高并发的系统解决方案

    原创: 架构师进阶 优知学院 5天前 " 很多只知道高并发,却不知道高并发与多线程的关系,以及真正的高并发应该如何设计技术方案" 01 - 什么是高并发 高并发(High Conc ...

最新文章

  1. 交通图网络太大太复杂,没法处理?DMVST-Net巧妙处理
  2. 4 angular 重构 项目_vuejs angularjs 框架的一些比较(vue项目重构四)
  3. php加载外部html,VUE页面加载外部HTML实例详解
  4. hdu1403 后缀数组
  5. java推送Comet_使用Comet4j实现消息推送
  6. mosquitto源码分析(六)
  7. 可还行?这款手机首获德国红点设计大奖
  8. “ this”关键字如何工作?
  9. python查看服务器日志_python读取服务器日志的方法
  10. 微信查好友单删检测方法,无打扰,快来学
  11. HTML+CSS+JS在线客服对话框迷你版
  12. JS校验银行卡号以及通过银行卡号自动带出所属银行信息
  13. from functools import reduce——从典型实例做抓手看reduce函数使用
  14. 2020年黑龙江省大豆种植分布数据
  15. 笔记本连接外接显示器显示“显示信号输入超出范围“解决方案
  16. Spring Boot项目学习之通用权限管理项目01
  17. BAT、网易、蘑菇街面试题整理
  18. 和亚马逊Amazon进行跨境电商业务,需要接入EDI吗?
  19. 抛硬币直到连续2次正面的概率
  20. stata F值缺失_Stata开机设定 - profile.do 文档

热门文章

  1. php deprecated,解决php中each函数在7.2版本提示deprecated错误问题
  2. 东芝笔记本linux系统安装驱动,笔记本驱动,详细教您东芝笔记本无线网卡驱动怎么安装...
  3. hdu5279 YJC plays Minecraft 【分治NTT】
  4. C++ 初始化列表初始化列表性能问题的简单的探索
  5. 初学Java6:Java OOP基础语法总结
  6. nginx 不带www到www域名的重定向
  7. InnoDB还是MyISAM?
  8. ElasticSearch 2 (27) - 信息聚合系列之故事开始
  9. 在SharePoint 2010中创建网站的权限级别
  10. ASP.NET中的Menu控件的应用