memcached、Redis缓存的数据都是key-value的形式,那缓存时,具体是key、value分别是怎样的数据呢?
一、缓存时,具体是key、value分别是怎样的数据
首先Memcache是一个基于内存的key/value分布式缓存系统,不过memcache还可用于缓存其他东西,例如图片、视频等等。Redis是一个开源的基于内存亦可持久化的日志型、Key-Value的数据库。
Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
大部分缓存实现时都是基于key/value形式,主要是缓存的使用场景决定的。另外,Redis是一种NoSQL数据库,使用场景也不仅仅限于缓存。
Memcached通过使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的时间复杂度降低到O(1),保证了对数据的高性能访问。
memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe传递给worker线程,进行读写IO,网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如:memcached最常用的stats命令,实际memcached所有操作都要对这个全局变量加锁,进行技术等工作,带来了性能损耗。
延伸阅读:
二、Memcached内存管理机制
Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果名列前茅组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。

相关推荐HOT
更多>>
oracle和sqlserver优点是什么?
一、oracle的优点 1、高性能Oracle数据库是一种高性能的数据库管理系统,它可以处理大量数据,并在几乎任何规模的应用程序中提供高可用性。Orac...详情>>
2023-10-17 23:33:40
Windows下什么客户端支持ssh远程连接MySQL数据库?
一、Windows支持ssh远程连接MySQL数据库的客户端1、PuTTYPuTTY是一个免费、开源的SSH和Telnet客户端工具,它可以在Windows上与MySQL服务器建立S...详情>>
2023-10-17 23:02:03
有什么好用的sqlserver数据库客户端软件?
1、SQL Server Management Studio (SSMS)SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。Managemen详情>>
2023-10-17 21:55:55
为什么 Informix 数据库需要定期 UPDATE STATISTICS?
一、为什么 Informix 数据库需要定期 UPDATE STATISTICS因为Informix 数据库需要定期 UPDATE STATISTICS可以查询统计优化,对频繁插入数据的表...详情>>
2023-10-17 21:25:14热门推荐
oracle和sqlserver优点是什么?
沸Windows下什么客户端支持ssh远程连接MySQL数据库?
热spyder怎样读取sql server的数据库?
热有什么好用的sqlserver数据库客户端软件?
新为什么 Informix 数据库需要定期 UPDATE STATISTICS?
memcached、Redis缓存的数据都是key-value的形式,那缓存时,具体是key、value分别是怎样的数据呢?
plsqldev里的SQL窗口文件没保存怎么找回?
HTML5的WEB SQL Database和IndexDB的用法和区别?
在oracle中,select * from dual where ”=”为什么返回的是空?
Mysql中sum和group by联用求和为什么会计算不准确?
Linux配置开机自启动执行脚本方法有哪些?
jmeter性能测试步骤?
TCL语言都能做什么?
运算符->*是什么意思?
技术干货






