Redis

2021/8/14 2:05:54

本文主要是介绍Redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

转载自JavaGuide/redis-all.md at master · Snailclimb/JavaGuide (github.com)

  • 1. 简单介绍一下 Redis 呗!
  • 2. 分布式缓存常见的技术选型方案有哪些?
  • 3. 说一下 Redis 和 Memcached 的区别和共同点
  • 4. 缓存数据的处理流程是怎样的?
  • 5. 为什么要用 Redis/为什么要用缓存?
  • 6. Redis 常见数据结构以及使用场景分析
    • 6.1. string
    • 6.2. list
    • 6.3. hash
    • 6.4. set
    • 6.5. sorted set
    • 6.6 bitmap
  • 7. Redis 单线程模型详解
  • 8. Redis 没有使用多线程?为什么不使用多线程?
  • 9. Redis6.0 之后为何引入了多线程?
  • 10. Redis 给缓存数据设置过期时间有啥用?
  • 11. Redis 是如何判断数据是否过期的呢?
  • 12. 过期的数据的删除策略了解么?
  • 13. Redis 内存淘汰机制了解么?
  • 14. Redis 持久化机制(怎么保证 Redis 挂掉之后再重启数据可以进行恢复)
  • 15. Redis 事务
  • 16. 缓存穿透
    • 16.1. 什么是缓存穿透?
    • 16.2. 缓存穿透情况的处理流程是怎样的?
    • 16.3. 有哪些解决办法?
  • 17. 缓存雪崩
    • 17.1. 什么是缓存雪崩?
    • 17.2. 有哪些解决办法?
  • 18. 如何保证缓存和数据库数据的一致性?
  • 19. 参考
  • 20. 公众号

1. 简单介绍一下 Redis 呗!

简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。

另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。

Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。

2. 分布式缓存常见的技术选型方案有哪些?

分布式缓存的话,使用的比较多的主要是 Memcached 和 Redis。不过,现在基本没有看过还有项目使用 Memcached 来做缓存,都是直接用 Redis。

Memcached 是分布式缓存最开始兴起的那会,比较常用的。后来,随着 Redis 的发展,大家慢慢都转而使用更加强大的 Redis 了。

分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用信息的问题。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共同的。

3. 说一下 Redis 和 Memcached 的区别和共同点

现在公司一般都是用 Redis 来实现缓存,而且 Redis 自身也越来越强大了!不过,了解 Redis 和 Memcached 的区别和共同点,有助于我们在做相应的技术选型的时候,能够做到有理有据!

共同点 :

  1. 都是基于内存的数据库,一般都用来当做缓存使用。
  2. 都有过期策略。
  3. 两者的性能都非常高。

区别 :

  1. Redis 支持更丰富的数据类型(支持更复杂的应用场景)。Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Memcached 只支持最简单的 k/v 数据类型。
  2. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。
  3. Redis 有灾难恢复机制。 因为可以把缓存中的数据持久化到磁盘上。
  4. Redis 在服务器内存使用完之后,可以将不用的数据放到磁盘上。但是,Memcached 在服务器内存使用完之后,就会直接报异常。
  5. Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前是原生支持 cluster 模式的。
  6. Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型。 (Redis 6.0 引入了多线程 IO )
  7. Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持。并且,Redis 支持更多的编程语言。
  8. Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除。

相信看了上面的对比之后,我们已经没有什么理由可以选择使用 Memcached 来作为自己项目的分布式缓存了。

4. 缓存数据的处理流程是怎样的?

作为暖男一号,我给大家画了一个草图。

正常缓存处理流程

简单来说就是:

  1. 如果用户请求的数据在缓存中就直接返回。
  2. 缓存中不存在的话就看数据库中是否存在。
  3. 数据库中存在的话就更新缓存中的数据。
  4. 数据库中不存在的话就返回空数据。

5. 为什么要用 Redis/为什么要用缓存?

简单,来说使用缓存主要是为了提升用户体验以及应对更多的用户。

下面我们主要从“高性能”和“高并发”这两点来看待这个问题。

高性能 :

对照上面 



这篇关于Redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程