Redis和memcached的区别

一、Redis介绍

    1、强一致性:任何时刻所有用户查询到的都是最新的数据。(关系型数据库的更新操作)
         最终一致性:某一时刻不同用户或进程查到的数据可能不同,但是最终更新成功的数据都能查到。(主流NoSQL是这种)
         NoSQL:基于内存的数据库,提供一定的持久化功能。Redis和MongoDB就是NoSQL。

   2、Redis性能优越:支持每秒十几万次的读/写操作;
         Redis支持集群、分布式、主从同步等;
         支持多种数据结构类型;

   3、redis单线程:单个线程处理所有的网络请求,其他模块仍然用多线程(事件处理器解决task用多线程)。

   4、redis的应用:缓存、需要高速读/写场景当DB使用、分布式锁、token生成、session共享等
            缓存场景:比如查业务线信息、客服信息、话术配置等,高频读低频写的场景,适合加缓存;
            需要高速读/写场景:直接读写redis,当db用,快速业务响应。(拉会话数据类似这个场景,db和redis都写,只查redis)

   5、redis的事务:WATCH key类似乐观锁,监视一些key如果执行过程被改则中断;MULTI指令开始事务;EXEC执行事务。
        redis的事务比较鸡肋:生产都是redis集群做了数据分片操作,事务中操作多个key不一定落在同一个节点上。

   6、credis封的jedis,执行时间超过10ms时打了监控。

二、Redis和memcached的比较

   1.都是内存数据库,memcached还可以存图片、视频。
   2.存储数据类型:memcached的value只能是String,redis支持string/hash/list/set/sortedSet等数据结构。
   3.虚拟内存:redis当内存用完时,可以把很久没用的value放到磁盘。
   4.redis是单线程,memcached是多线程的。
   5.Redis更可靠:memcached不支持持久化;redis可通过RDB快照和AOF日志持久化,所以支持灾难恢复,支持主从数据备份。
   6.应用场景:redis除了可以做NoSQL数据库使用,还可以做消息队列、分布式锁等。

三、为什么单线程的Redis效率比多线程的memcached要高

  1、非阻塞IO、IO多路复用机制:一个线程处理多个socket连接,将产生事件的socket压入内存队列中,再通过文件事件处理器(file event handler)交给对应的处理器解决。
  2、纯内存操作,读写快;
  3、单线程,避免了多线程上下文切换开销;
  4、使用hash结构或其他有序数据结构,读写快;

 

生产上对redis的使用
    1. 当DB使用,会话数据在redis都有一份。(为了更快的查询效率,牺牲了一部分一致性)
    2. redis分布式锁,防止短时间内相同参数同时调用,导致代码同时执行。跑完了删key释放锁。
    3. 当缓存使用,例如在搜索的时候,同一个uid+搜索关键字,在短时间内重复请求,直接返回redis缓存里面的数据。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值