redis缓存机制和底层实现

说 Redis 的缓存机制实现之前,我想先回顾一下 mysql

mysql 存储在哪儿呢?

以 windows 为例,mysql 的表和数据,存储在data 目录下frm ibd 后缀的文件中

mysql存储在机器/服务器的 硬盘中

所以 mysql 读写数据都需要从磁盘读取 。磁盘的容量,带宽的大小就影响了网站的访问速度,读取的方式,也就是 sql 语句,次数和效率也会影响读取效率。

当访问量和并发很大的时候,mysql 就撑不住了,据统计,mysql的连接池并发数max为 500-1000

这时,我们可以通过 慢查询优化 ,cdn ,页面静态化nginx 负载均衡策略 ,甚至 分布式数据库 来进行 sql优化 ,当然也可以使用 高速缓存,比如 redis



Redis - 高并发,内存高速cache ,处理读写io的高并发容忍。

redis 通常被使用来将那些经常被访问的内容缓存在内存中。

很多人谈到redis ,哦,k-v 存储数据库啊, 速度快啊!为什么快啊? 人家存内存啊,能不快吗?关键人家还支持复杂的数据结构,list 什么的,很多高并发场景都可以使用。 比如:电商秒杀场景的解决策略与具体原理

remote dictionary server (远程数据服务) 内存高速缓存数据库 数据模型为 k-v 也就是redis 的一种最经常使用的数据类型 string

k-v 的算法时间复杂度 可是 0(1) 而mysql 的查询是基于表关联技术 ,这就是nosql的优势所在。

附上redis 和memcahe 的比较

  1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  2. Redis支持master-slave(主-从)模式应用,高可用的cache系统,支持集群服务器之间数据同步。
  3. Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  4. Redis单个value的最大限制是1GB,(k-v),memcached只能保存1MB的数据。(k:250kb v:1mb)

redis 比sql 到底快多少呢? 
1 从存储媒介来看,内存比磁盘的读取速度 hash查找是100w/s 的数量级

2 多路复用io (todo)



redis 和mysql 绝对不是竞争的关系,在工作中合理运用两者才能达到更好的效果。

时间: 2024-10-29 05:06:19

redis缓存机制和底层实现的相关文章

我的redis缓存机制和redis数据结构整理(一)

摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单线程的 3.管道 4.我的测试代码 内容总结 0.redis安装 官网地址 http://redis.io/ 下载:wget http://download.redis.io/releases/redis-3.2.4.tar.gz 解压:tar xzf redis-3.2.4.tar.gz 编译:c

【Redis缓存机制】13.Java连接Redis_Jedis_事务

Jedis事务 我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中, 也需要使用openSession()来获取session事务对象,来进行sql执行.查询等操作.当我们 对数据库的操作结束的时候,是事务对象负责关闭数据库连接. 事务对象用于管理.执行各种数据库操作的动作.它能够开启和关闭数据库连接,执行sql 语句,回滚错误的操作. 我们的Redis也有事务管理对象,其位于redis.clients.jedis.Transaction下. Jed

Redis 缓存失效机制

Redis缓存失效的故事要从EXPIRE这个命令说起,EXPIRE允许用户为某个key指定超时时间,当超过这个时间之后key对应的值会被清除,这篇文章主要在分析Redis源码的基础上站在Redis设计者的角度去思考Redis缓存失效的相关问题. Redis缓存失效机制 Redis缓存失效机制是为应对缓存应用的一种很常见的场景而设计的,讲个场景: 我们为了减轻后端数据库的压力,很开心的借助Redis服务把变化频率不是很高的数据从DB load出来放入了缓存,因此之后的一段时间内我们都可以直接从缓存

缓存机制总结(JVM内置缓存机制,MyBatis和Hibernate缓存机制,Redis缓存)

一.JVM内置缓存(值存放在JVM缓存中) 我们可以先了解一下Cookie,Session,和Cache Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你.具体来说Cookie机制采用的是在客户端保持状态的方案(保存客户浏览器请求服务器页面

6.redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

作者:中华石杉 面试题 redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 面试官心理分析 redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据就全部都弄丢了啊.你必须得用 redis 的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件里,进行持久化. 如果 redis 宕机重启,自动从磁盘上加载之前持久化的一些数据就可以了,也许会丢失少许数据,但是至少不会将所有数据都弄丢. 这个其实一样,针对

Spring(五)Spring缓存机制与Redis的结合

一.Redis和数据库的结合 使用Redis可以优化性能,但是存在Redis的数据和数据库同步的问题. 例如,T1时刻以将 key1 保存数据到 Redis,T2时刻刷新进入数据库,但是T3时刻发生了其他业务需要改变数据库同一条记录的数据,但是采用了 key2 保存到Redis中,然后又写入了更新数据到数据库中,这就导致 Redis 中key1 的数据是脏数据,和数据库中的数据不一致. 1.Redis和数据库读操作 数据缓存往往会在 Redis 上设置超时时间,当设置 Redis 的数据超时后,

Redis缓存过期处理与内存淘汰机制

Redis对已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略. redis有两种策略: (主动)定时删除 定时随机的检查过期的key,如果过期则清理删除.(每秒检查次数在redis.conf中的hz配置) (被动)惰性删除 当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil.这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高. 所以

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

美团针对Redis Rehash机制的探索和实践

背景 Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统.经过不断的迭代研发,目前已形成一整套自动化运维体系,涵盖一键运维集群.细粒度的监控.支持自动扩缩容以及热点Key监控等完整的解决方案.同时服务端通过Docker进行部署,最大程度的提高运维的灵活性.分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系统之一. 随着使用的量和场景不断深入,Squirrel团队也不断