缓存结构 redis、memcache、Ehcache

Redis

Redis:开源、免费、非关系型数据库、K-V数据库、内存数据库,支持持久化、事务和备份,集群(支持16个库)等高可用功能。并且性能极高(可以达到100000+的QPS),易扩展,丰富的数据类型,所有操作都是单线程,原子性的,与其他的key-value类型数据库的的明显区别:
- 支持数据持久化 两种方式:RDB快照和AOF日志
- 提供五种类型的数据结构存储:String、Hash、List、Set、SortedSet
- 支持主从同步
具有如下优势:性能高、支持数据类型多、操作具有原子性、特性丰富。适合对读取效率要求高、处理业务复杂及要求较高安全性的场景。

MemCache

是一个高性能分布式内存对象缓存系统,内存中维护一个巨大的哈希表,用来存储各种格式的数据,简单来讲就是讲数据调入内存中,然后从内存中读取。通常用做缓存,缓解关系数据库的压力,提升网站和应用的响应速度。一般过程如下:
- 检查缓存中是否有数据
- 如无,从数据库中读取存入缓存
- 数据库中数据变化时,要同步更新缓存中的数据
在动态系统中减轻数据库负载,提升性能,做缓存,适合多读少写的大数据量场景

Ehcache

是一个广泛使用的基于Java的分布式缓存,快速轻量、可伸缩、可扩展、可持久等诸多特性,适合对缓存访问要求很高的应用。

相关区别:

网络IO模型

memcached是多线程,非阻塞IO服用的网络模型,网络层使用libevent封装事件库,能够发挥多核的作用。但由于多线程加锁,导致了一定程度的性能损耗。
redis使用了单线程的IO复用模型,自己封装了简单的时间处理框架,单线程可以把速度的优势发挥到最大,同时redis也提供了一些简单的计算功能,但是计算会影响整体吞吐量(计算时IO调度被阻塞)

数据支持类型

memcached使用键值对形式存储和访问数据,在内存中维护了一个巨大的哈希表,保证了对数据的高性能访问。
redis支持五种数据类型,包括string, list, hash, set, sortedset

内存管理机制

对于基于内存的数据库系统而言,内存的管理效率是影响系统性能的关键。MemCache采用slab allocation机制管理内存,即按照预定的大小将分配的内存分割成特定长度的块以存储相应长度的键值对数据,以期完全解决内存碎片的问题。而Redis在分配一块内存后,会将这块内存的大小写入内存块的头部,当物理内存用完后,Redis会将一些很久没有用到的value交换到磁盘,而只缓存key信息。

数据存储及持久化

memcached所有数据以in-memory形式存放,redis支持持久化操作。redis提供两种不同的持久化方式将数据存储到磁盘中:快照和只追加文件。

数据一致性问题

Memcached提供了cas命令(检查并设置,仅当当前客户端最后取值后,且值没有被其他客户端更改才能写入),保证了高并发情况下数据一致性问题。Redis提供了事务功能保证一串命令的原子性

集群管理不同

Memcached本身不支持分布式,只能在客户端层面上通过一致性哈希这样的分布式算法实现分布式存储。Redis Cluster是一个实现了分布式且允许单点故障的redis高级版本,没有中心结点,具有线性伸缩功能。
为保证高可用redisCluster引入了主从节点,并且每一个主结点拥有对应的两个从节点,保证了任意两个结点的宕机不会导致数据不可用,而当一个主节点退出时也会自动选择一个从结点成为新的主节点

  1. Memcached一个value支持1M,而Redis支持512M
  2. Memcached只是一个内存缓存,可靠性要求不高,而Redis倾向于内存数据库,具有较高的可靠度
  3. 从本质上讲,Memcache只是一个单一键值对的内存缓存,而redis是一个数据结构内存数据库,支持五种数据类型,还可以处理简单的逻辑晕眩,可以作为数据库使用。

奇怪的知识点:
NOSQL:非关系型数据库,数据与数据之间没有关联关系。就是为了解决大规模数据集合、多重数据种类带来的挑战,尤其是大数据应用难题

参考:
https://cloud.tencent.com/developer/article/1055829
https://codekiller.top/2020/03/30/redis2/

posted @ 2020-07-13 18:31  zhilong233  阅读(9)  评论(0编辑  收藏