一、redis 简介
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

1、为什么要用Redis或为什么要使用缓存数据库
主要从“高性能”和“高并发”这两点来看待这个问题。
(1)高性能:
假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

(2)高并发:
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

2、为什么要用 redis 而不用 map/guava 做缓存?
缓存分为本地缓存和分布式缓存。
(1)以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
(2)使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

3、redis 的线程模型。
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

a.多个 socket
b.IO 多路复用程序
c.文件事件分派器
d.事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

多个 socket可能会并发产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,会将socket产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。

4、redis 和 memcached 的区别?

对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越强大了!

(1)redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。
(2)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。
(3)集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前是原生支持 cluster 模式的.
(4)Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

最新文章

  1. 《Mastering.Ext.JS. 》书上主要示例都搞了个样子出来,纪念
  2. BinaryHeap Java实现
  3. 为ASP.NET MVC应用添加自定义路由
  4. cadence 封装制作小结
  5. winFrom窗体样式
  6. C#中HashTable和快速排序的用法
  7. Java初认识--Java语言的书写规范及基本的运算符
  8. 栅栏——CyclicBarrier
  9. 在Coding上搭建Hexo个人博客
  10. 爬虫系列---selenium详解
  11. WRF 安装备忘
  12. https://github.com/gaoyangxiaozhu/DockerVI
  13. Spring Boot默认Initializer(1)——ConfigurationWarningsApplicationContextInitializer
  14. UVA816-Abbott's Revenge(搜索进阶)
  15. STL的基本介绍
  16. Android一些小技巧
  17. 使用框架帮助Activity规范化
  18. c#中变量的作用域
  19. 各种Map的区别,想在Map放入自定义顺序的键值对
  20. MySQL主从复制状态及数据一致性监测工具

热门文章

  1. 实操|如何将 Containerd 用作 Kubernetes runtime
  2. Centos 7 网卡配置
  3. IE浏览器兼容问题总结
  4. 图像分类学习:X光胸片诊断识别----迁移学习
  5. Vue 标签Style 动态三元判断绑定
  6. Cisco发现协议
  7. RVA与FOA的转换
  8. 第一个 IDEA 应用程序
  9. 在项目中如何自定义的Eslint配置
  10. redis性能优化、内存分析及优化