Redis和MySQL的区别与使用(redis做mysql的缓存并且数据同步)

Redis和MySQL的区别与使用(redis做mysql的缓存并且数据同步)一、redis和mysql介绍Redis基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵。MySQL基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高。大多数的应用场景是MySQL(主)+Redis(辅),MySQL做为主存储,Redis用于缓存,加快访问速度。需要高性能的地方使用Redis,不需要高性能的地方使用M…

大家好,又见面了,我是你们的朋友全栈君。

一、redis和mysql介绍

Redis基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵。

MySQL基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高。

大多数的应用场景是MySQL(主)+Redis(辅),MySQL做为主存储,Redis用于缓存,加快访问速度。需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步。

二、redis和mysql的区别

两者的区别非常大。
具体如下:

1. mysql是一个中小型的网络数据库,比oracle和sqlserver小, 但是并发能力远超过access这样的桌面数据库。
2. redis是一个支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
3. 可以认为redis比mysql简化很多。
4. mysql支持集群。

现在大量的软件使用redis作为mysql在本地的数据库缓存,然后再适当的时候和mysql同步。

三、为什么使用缓存?

      当网站的处理和访问量非常大的时候,我们的数据库的压力就变大了,数据库的连接池,数据库同时处理数据的能力就会受到很大的挑战,一旦数据库承受了其最大承受能力,网站的数据处理效率就会大打折扣。此时就要使用高并发处理、负载均衡和分布式数据库,而这些技术既花费人力,又花费资金。

四、什么是redis缓存到mysql?

Redis其实就是说把表中经常访问的记录放在了Redis中,然后用户查询时先去查询Redis再去查询MySQL,确实实现了读写分离,也就是Redis只做读操作。由于缓存在内存中,所以查询会很快。对于一个sql语句格式的数据请求,首先计算该语句的MD5并据此得到结果集标识符,然后利用该标识符在Redis中查找该结果集。注意,结果集中的每一行都有一个相应的键,这些键都存储在一个Redis集合结构中。如果Redis中不存在这样一个集合,说明要找的结果集不在Redis中,所以需要执行相应的sql语句,在Mysql中查询到相应的结果集,然后按照上面所说的办法把结果集中的每一行以字符串或哈希的形式存入Redis。

五、为什么使用redis做mysql的缓存,还有其他缓存策略吗?

Memcatched和Redis
1.性能上:
       性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
2.内存空间和数据量大小:
      MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。
3.操作便利上:
      MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
4.可靠性上:
       MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
5.应用场景:
       Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

参考文章:https://www.cnblogs.com/work115/p/5584646.html

六、如何redis数据和mysql数据同步?

      redis其读取速度快,但是redis 怎么和数据库同步呢,怎么能把数据库的所有数据存到redis里面,能使用户更快速的查找。

方法1:mysql 同步到redis:解析mysql的binlog,然后做同步处理,可以使用的库有:open-replicatorhttps://github.com/whitesock/open-replicator

方法2:同步redis数据到mysql:(https://github.com/leonchen83/redis-replicator

后来发现,redis读取速度快,也没有必要把所有的数据都放到redis里面,redis里面只放使用频繁,用户操作量较大的数据,或者用户近期使用的数据。解决办法: 
1:读取数据的时候先从redis里面查,若没有,再去数据库查,同时写到redis里面,并且要设置失效时间。 
2:存数据的时候要具体情况具体分析,可以选择同时插到数据库和redis(要是存放到redis中,最好设置失效时间),也可以选择直接插到数据库里面,少考虑一些问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147891.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IE内存溢出报错Stack overflow at line[通俗易懂]

    IE内存溢出报错Stack overflow at line[通俗易懂]该错误只在IE中出现,出现该提示的原因主要有两种:1.重定义了系统的触发事件名称作为自定义函数名如: onclick/onsubmit… 都是系统保留的事件名称,不允许作为重定义函数名称。2.出现死循环,都提示:Stackoverflowatline:0,如:在图片对象定义了onerror事件的循环处理、onload这里并不是说/im

    2022年7月15日
    19
  • 带通滤波器设计要注意采样率

    带通滤波器设计要注意采样率设计为采样频率600M,中心频率140M,带宽2M,Fs_org=140e6;Fs=Fs_org;T=1/Fs;%600/140=4.28,约600M采样率,t1=[0:T/4.28:1000*T];%原先错误代码,几乎就没有滤波%t1=[0:T/200:1000*T];%错误在于采样率远远大于600Mp=3*sin

    2022年5月27日
    30
  • 大规模储能技术_新技术储备

    大规模储能技术_新技术储备eBPF-Linux性能优化的超能力

    2025年11月30日
    8
  • 光流法运动目标检测[通俗易懂]

    光流法运动目标检测[通俗易懂]接上篇,OpenCV视频目标跟踪及背景分割器,本篇介绍OpenCV—python目标跟踪==》光流法回顾:目标跟踪是对摄像头视频中的移动目标进行定位的过程。实时目标跟踪是许多计算机视觉应用的重要任务,如监控、基于感知的用户界面、增强现实、基于对象的视频压缩以及辅助驾驶等。关于实现视频目标跟踪的方法有很多,当跟踪所有移动目标时,帧之间的差异会变的有用;当跟踪视频中移动的手时,基于皮肤颜色的均…

    2022年7月23日
    19
  • var let const作用域_实例变量用什么声明

    var let const作用域_实例变量用什么声明读《全局作用域中,用const和let声明的变量去哪了?》

    2022年4月21日
    59
  • Mybatis模糊查询的四种方式

    Mybatis模糊查询的四种方式Mybatis 模糊查询的四种方式 1 根据姓名模糊查询员工信息 1 1 方式一步骤一 编写配置文件步骤二 测试步骤三 分析此种方式需要在调用处手动的去添加 通配符 1 2 方式二说明 使用方式一可以实现模糊查询 但是有一点不方便的地方就是 在测试类中 调用 selectList 方法传参时需要调用者手动的添加 号通配符 显然是麻烦的 能否在映射配置文件中直接将 号写好呢 有的朋友可能会这么想 好办 直接在配置文件中这么写 形如 1 测试后发现 程序会报错 原因是 缺少单引号 这个

    2025年7月24日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号