美文网首页厚积薄发
mysql和redis的区别

mysql和redis的区别

作者: 杜艳_66c4 | 来源:发表于2020-03-30 15:12 被阅读0次

    1、基本
    redis除了做缓存,还能做其他事情,最广泛的应用场景是缓存;Memcache仅用做缓存
    2、redis 应用场景能做什么:
    a、缓存,提升服务器性能
    b、排行榜,SortSet(有序集合)数据结构能够简单的搞定
    c、计算器/限速器,利用redis中原子性的自增操作,可以统计类似用户点赞数,用户访问等,若用mysql,频繁的读写会带来大压力;限速器场景:限制某个用户访问某个API频率,如,抢购时,防止用户疯狂点击带来压力。
    d、简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦
    e、Session共享,以PHP为例,默认Session是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息
    f、一些频繁被访问的数据,经常被访问的数据如果放在关系型数据库,每次查询的开销都会很大,而放在redis中,因为redis 是放在内存中的可以很高效的访问
    g、好友列表,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;

    3、redis不能作什么:
    a、数据量大的,会增加成本,
    b、访问频率太低的,保存在内存中浪费资源。

    4、区别
    1数据库类型
    redis是一个key-value存储系统,是nosql,非关系型数据库,和memcache都是缓存数据库
    mysql是关系型数据库
    2存储
    redis用于存储使用相对频繁的数据到内存,这样减少访问数据库次数,提高效率。
    mysql用于存持久化数据到磁盘
    3速度
    redis读取速度快,
    mysql读写速度相对慢
    4数据类型
    redis数据类型:字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)
    mysql数据类型,大致三类:数值,日期,字符
    5、使用
    一般来说,mysql用于写入和更新,redis用于读取。 这样就说 mysql->redis的同步用的比较多。mysql和redis因为需求的不同,一般都是配合使用。
    1redis快,先请求redis,redis找不到再去请求mysql,相当于mysql前面加了一个redis,提高性能,(缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快)

    在并发不高的情况下,读操作优先读取redis,不存在的话就去访问MySQL,并把读到的数据写回Redis中;
    写操作的话,直接写MySQL,成功后再写入Redis(可以在MySQL端定义CRUD触发器,在触发CRUD操作后写数据到Redis,也可以在Redis端解析binlog,再做相应的操作)

    在并发高的情况下,读操作和上面一样;
    写操作是异步写,写入Redis后直接返回,然后定期写入MySQL

    6、那么为什么不直接全部用redis存储呢?
    我的看法是:因为redis存储在内存中,如果存储在内存中,存储容量肯定要比磁盘少很多,那么要存储大量数据,只能花更多的钱去购买内存,造成在一些不需要高性能的地方是相对比较浪费的,所以目前基本都是mysql(主) + redis(辅),在需要性能的地方使用redis,在不需要高性能的地方使用mysql,好钢用在刀刃上
    1、mysql支持sql查询,可以实现一些关联的查询以及统计;

    2、redis对内存要求比较高,在有限的条件下不能把所有数据都放在redis;

    3、mysql偏向于存数据,redis偏向于快速取数据,但redis查询复杂的表关系时不如mysql,所以可以把热门的数据放redis,mysql存基本数据

    相关文章

      网友评论

        本文标题:mysql和redis的区别

        本文链接:https://www.haomeiwen.com/subject/omuyuhtx.html