Redis 单进程单线程模型的基于内存的KV 数据库,由C语言编写
Memcached 是单进程多线程的同样基于内存的 KV 数据库
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
---------------------
作者:徐刘根
来源:CSDN
原文:https://blog.csdn.net/xlgen157387/article/details/79470556
版权声明:本文为博主原创文章,转载请附上博文链接!
缓存使用
缓存预热
缓存穿透
持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,对数据库造成很大压力,甚至导致数据库崩溃。
对策:
1. 将不存在的数据也缓存起来(其值为null)
2. 布隆过滤器
优势:
全量存储但是不存储元素本身,在某些对保密要求非常严格的场合有优势;
空间高效率;
插入/查询时间都是常数O(k),远远超过一般的算法;
劣势:
存在误算率(False Positive),随着存入的元素数量增加,误算率随之增加;
一般情况下不能从布隆过滤器中删除元素;
数组长度以及hash函数个数确定过程复杂;