Redis

什么是缓存击穿、雪崩、穿透

久未见 提交于 2020-12-12 02:22:09
随着互联网的越来越普及,用户越来越多,系统性能瓶颈成了越来越热门的话题。 要解决性能问题的技术手段有很多,比如: 缓存、CDN加速、页面静态化、集群、分布式、异步等。 缓存 通常被作为首先技术方案,简单而且提升效果明显,它能够将速度提升100倍。那么问题来了,缓存为啥会怎么快呢? 因为传统的数据库操作是基于磁盘的,而缓存是基于内存的,内存操作和磁盘操作的速度根本不是一个数量级的。目前市面上主流的缓存有: redis 和 memcache ,这两个都是基于内存的缓存技术,二者的区别我在这里暂时不讲。使用缓存的伪代码一般如下: String order = redisClient.get(key); if (order != null ) { return order; } order = db.get(key); redisClient.put(key,order); redisClient.expire(key, 3000 ); return order; 根据key获取数据,先从缓存中查一下有没有,如果有则直接返回。如果没有,再从数据库中查到数据,然后将数据放入缓存中,并且给当前key设置一个失效时间,下次再用同样的key来请求数据时,就能够直接从缓存中查询到并返回,减少请求数据库的频次,提升性能,因为数据库连接是稀有资源。 那么问题又来了,为啥要设置失效时间,不设置不行吗?

一道面试题

五迷三道 提交于 2020-12-12 01:08:28
背景介绍 这里给大家分享一道很有趣的面试题。 面试过程 面试官:redis我看你有使用过,说一下redis的基本类型吧? A:String,Hash,Set,List,Zset。 面试官:redis中string类型的实现有没有了解过? A:(喵喵喵?) 面试官:回家等通知吧。 面试反思 作为一个爱学习的好孩子,遇到不会的当然要努力学习了,于是查阅了良多资料,算是把这个问题给搞明白了,下面且听我慢慢道来~ Redis的底层数据结构 经过查阅资料,发现Redis的底层数据结构分为八种 Long类型的整数 embstr 编码的简单动态字符串 简单动态字符串 字典 双端链表 压缩列表 整数集合 跳跃表和字典 简单动态字符串 Redis底层是用C语言写的,C语言中的字符串就是一个简单的字符数组,Redis中为了实现方便的扩展、安全和性能,自己定义了一个结构用来存储字符串。 我们叫它简单动态字符串(simple dynamic string)。 该数据结构中除了保存字符串,还保存了free(表示字符串剩余的空间)以及len(当前子字符串的长度)。 相比于C中的字符串,Redis这样做有几点好处: 获取字符串长度的复杂度为O(1) 由于sdshdr结构中定义了len用来保存当前字符串长度,因此不必像C中一样遍历字符串来得到长度。 不会造成缓冲区溢出

Java性能优化的100+小技巧!(干货建议收藏)

只谈情不闲聊 提交于 2020-12-12 00:42:54
PS: 介绍一下老王,不是隔壁的那种,我被他的专注和对细节的追求震撼到,这应该就是技术人的态度吧,当遇到技术性能瓶颈时,往往就是差那么一点细节 老王刚刚把手册整理完毕,专注于 性能优化 的学习手册出炉啦!共计 140 多页,图文并茂,附有源码。 内容包括但不限于: 阿 里巴巴关于性能的14条规定! try-catch要放在循环体外还是循环体内? 局部变量竟然比全局变量快 5 倍? String 性能优化的 3 个小技巧 HashMap 7 种遍历方式的性能评测与优化 If / switch 性能评测 switch 性能优化 JVM 性能优化 MySQL性能优化的 50+ 小技巧 Redis 性能优化的 13 个小技巧 . . . 获取方式 1. 首先扫描下方二维码 2. 后台回复「 性能 」即可获取 每篇文章图文并茂,附有源码 + 性能评测结果 + 优化方案。 手册部分内容展示 获取方式 1. 首先扫描下方二维码 2. 后台回复「 性能 」即可获取 本文分享自微信公众号 - 日拱一兵(gh_6235a38420b9)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。 来源: oschina 链接: https://my.oschina.net/u/4149877/blog/4367589

推荐一个基于 SpringBoot2 + MybatisPlus 的商城管理系统

女生的网名这么多〃 提交于 2020-12-11 17:43:05
项目简介 SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue 的前后端分离的商城系统, 包含商城、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销、会员、充值、多门店等功能,更适合企业或个人二次开发。 商城功能 商品模块:商品添加、规格设置,商品上下架等 订单模块:下单、购物车、支付,发货、收货、评价、退款等 营销模块:积分、优惠券、分销、砍价、拼团、秒杀、多门店等 微信模块:自定义菜单、自动回复、微信授权、图文管理、模板消息推送 配置模块:各种配置 用户模块:登陆、注册、会员卡、充值等 其他等 项目结构 项目采用分模块开发方式 yshop-weixin 微信相关模块 yshop-common 公共模块 yshop-admin 后台模块 yshop-logging 日志模块 yshop-tools 第三方工具模块 yshop-generator 代码生成模块 yshop-shop 商城模块 yshop-mproot mybatisPlus 系统预览 技术选型 后端使用技术 1.1 SpringBoot2 1.2 mybatis、MyBatis-Plus 1.3 SpringSecurity 1.5 Druid 1.6 Slf4j 1.7 Fastjson 1.8 JWT 1.9 Redis 1.10 Quartz 1.11

java实战项目教程分享(干货,建议收藏)

主宰稳场 提交于 2020-12-11 13:35:53
前言 :很多初级java程序员都活遇到的问题,不管是培训完,还是自学的,到了写简历的时候,没啥写的,尤其是速成班的那种培训,三四个月的时间,只是把基础学了一遍,还不知道学没学会,项目实战就别提了,登录注册都没弄明白,培训老师还叫你包装两三年的,哎真的是为了利益不择手段,哎,有点跑题了.下面就给大家分享几个java实战项目,给你简历增加点色彩,顺便还可以巩固一下之前学过的知识. 目录 一:记账本 二:天猫商城: 三: 趋势投资 一:记账本 学习地址 : https://how2j.cn/k/hutubill/hutubill-tutorials/710.html 本项目是基于Swing和JDBC开发的图形界面桌面应用,涵盖了J2SE的绝大部分基础知识,通过这个项目能运用和锻炼几乎大部分的J2SE知识和技能。 功能预览: 涉及到如下内容: 基础内容: 面向对象 字符串数字 日期 中级内容: 异常 ,集合,JDBC, 反射机制,I/O,Swing, 利用TableModel更新数据, 图形界面的皮肤 高级内容: 图表chart动态生成,数据库的备份与恢复,自定义圆形进度条 软件设计思想: 单例模式,面板类与监听器类松耦合,Entity层设计,DAO层设计,Service层设计 业务常见处理手法 : CRUD操作,配置信息,配置信息初始化,报表生成,一对多关系,多对一关系 二:天猫商城:

2020年度MVP隆重揭晓!12月11日邀你相约北京

泄露秘密 提交于 2020-12-11 11:37:25
受疫情与国际形势的严峻考验,2020年对于中国IT行业来说注定是不平凡的一年。时势造英雄,那些在逆境中砥砺前行、开拓创新的技术英才和精英团队,让我们一起向他们致以诚挚的感谢与敬意。 在此,“dbaplus社群2020年度MVP”隆重揭晓! 我们基于这一年来各方专家和团队的贡献,经过客观数据统计、专家评审团评选、大众票选的三轮评定, 恭喜以下专家和团队成为“2020年度MVP”! 2 020 MVP - 原创专家奖 2020年度MVP之原创专家奖,献给笔耕不辍撰写干货好文、孜孜不倦分享知识经验的他们: 贺春旸 凡普金科和爱钱进认真商城DBA团队负责人 专家简介: 凡普金科和爱钱进认真商城DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一、二版作者,曾任职于中国移动飞信、安卓机锋网。三次荣获dbaplus社群年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。 获奖感言: 谁说这个世界是冰冷而残酷的,只要你胸怀坚定的信仰,保持高昂的斗志,这个世界说不定就会向你露出灿烂的微笑。 技术贡献: 为社群提供四款自研开源工具并开放下载使用:MySQL Monitor、OS_Monitor、MongoDB ReplSet Monitor、MongoDB Slowquery; 通过多篇文章撰写及Newsletter信息提供

面试官:讲讲redis的过期策略如何实现?

≡放荡痞女 提交于 2020-12-11 09:34:21
时隔多日,小菜鸡终于接到阿里的面试通知,屁颠屁颠的从上海赶到了杭州。 经过半个小时的厮杀: 自我介绍 hashMap和ConcurrentHashMap区别 jdk中锁的实现原理 volatile的使用场景 threadLocal怎么实现?什么时候会用到? 面试官终于把考察点转到了redis上面,这是小菜鸡特意准备过的。 面试官:我看你简历提到xxx项目使用了redis 小弱鸡:嗯,因为xxxx的性能问题,经过排查之后,发现性能瓶颈在数据库上面,所以引入了redis 面试官:行,那你了解redis的过期策略吗? 小弱鸡:有了解过,因为redis是基于内存来进行高性能、高并发的读写操作的,既然是内存,那肯定有空间的限制,如果只有10g内存,一直往里面写数据,那肯定不行,所以采用一些过期策略把不需要的数据删除、或者是淘汰掉。 面试官:那都有哪些过期策略? 小弱鸡:我了解的有 定期删除、惰性删除两种 面试官:你先讲讲定期删除怎么实现? 小弱鸡好像有点兴奋:所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。 面试官:为什么是随机抽取? 小弱鸡:假如在redis 里插入10w个key,并且都设置了过期时间,如果每次都检查所有key,那cpu基本上都消耗在过期key的检查上了,redis对外的性能也会大大降低

Redis面试突击专用

最后都变了- 提交于 2020-12-11 07:54:37
来源:https://blog.csdn.net/Butterfly_resting/article/details/89668661 本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Redis 集群方案应该怎么做?都有哪些方案? 有没有尝试进行多机redis 的部署?如何保证数据一致的? 对于大量的请求怎么样处理 Redis 常见性能问题和解决方案? 讲解下Redis线程模型 为什么Redis的操作是原子性的,怎么保证原子性的? Redis事务 Redis实现分布式锁 Redis 持久化机制 Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。 实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出

腾讯云CES自动化运维架构及最佳实践

一曲冷凌霜 提交于 2020-12-11 06:55:21
主题: 腾讯云CES自动化运维架构及最佳实践 大纲: 1. 如何看待“运维”在公司的定位和未来的发展方向 2. 做好自动化运维架构需要关注哪些方面 3. 运维岗位必备技能 4. 提效处理故障方面的建议 5. 腾讯云CES方面的运维架构有哪些独到之处 听说3306π要搞事情了 是啊,马上要搞3306π深圳站了 啊,是吗?哪天啊,在哪里办,怎么报名? 12月19日 ,就在 深圳南山区海岸城 ,点文末的原文链接或者扫描二维码就可以报名了,一起来吹吹牛逼。 嘉宾自我介绍 李明 高级运维工程师 曾先后在携程、华为云等公司从事多年MySQL DBA的工作,目前在腾讯负责腾讯云Elasticsearch,CTSDB产品的运维工作。对于ES、CTSDB在日志分析、大数据搜索、时序分析等场景的使用有丰富的实践经验。 01 李老师,很多人都在谈脱离传统运维模式,更好的帮助业务前行。您是如何看待“运维”在公司的定位和未来的发展方向呢? 运维作为一个比较传统的岗位,在当前大量中小企业都拥抱上云或自动化程度越来越 高 的背景下,其工作的定位的却是受到了一些影响,以前需要专业运维来部署的一些环境,现在并不是那么需要了,但这并不意味着运维岗位的生存将受到很大的影响。 只是对运维人员提出了更高的要求,一方面需要运维人员对所服务的产品本身的特性,要相对开发人员有更深的认识,从而指导其更开发出更专业的产品

微服务三大利器之限流

∥☆過路亽.° 提交于 2020-12-11 05:47:03
背景 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存:提升系统访问速度和增大系统能处理的容量 降级:当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 限流:解决服务雪崩,级联服务发生阻塞时,及时熔断,防止请求堆积消耗占用系统的线程、IO等资源,造成其他级联服务所在服务器的崩溃 这里我们主要说一下限流,限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。 首先,我们需要去了解最基本的两种限流算法。 限流算法 漏桶算法 令牌桶算法 计算器算法 这里主要是提一下,详细了解限流算法请参考下面链接 https://www.cnblogs.com/hopeiscoming/p/12297528.html 限流框架 下面说一下现有流行的限流工具 guava Google的Guava工具包中就提供了一个限流工具类——RateLimiter。RateLimiter是基于“令牌通算法”来实现限流的。 hystrix hystrix主要是通过资源池以及信号量来限流,暂时能支持简单的限流 sentinel 限流比较主流的三种算法:漏桶,令牌桶,滑动窗口。而Sentinel采用的是最后一种,滑动窗口来实现限流的。当然sentinel不仅仅局限于限流