大家好,又见面了,我是你们的朋友全栈君。
说 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 的比较
- Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
-
Redis支持master-slave(主-从)模式应用,高可用的cache系统,支持集群服务器之间数据同步。
-
Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis单个value的最大限制是1GB,(k-v),memcached只能保存1MB的数据。(k:250kb v:1mb)
redis 比sql 到底快多少呢?
1 从存储媒介来看,内存比磁盘的读取速度 hash查找是100w/s 的数量级
2 多路复用io (todo)
redis 和mysql 绝对不是竞争的关系,就好像你拿485和86去秋名山飙车,他们应该是一对好基友,在工作中合理运用两者才能达到更好的效果。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148886.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...