网站设计的布局,wordpress免费吗,交互网站建设,网页搜索关键词快捷键后端项目如果用到分布式缓存的话#xff0c;一般用的都是 Redis。不过#xff0c;Redis 不仅仅能做缓存#xff0c;还能用作分布式锁、延时队列、限流等等。
什么是 Redis#xff1f;
Redis[1] #xff08;REmote DIctionary Server#xff09;是一个基于 C 语言开发的…后端项目如果用到分布式缓存的话一般用的都是 Redis。不过Redis 不仅仅能做缓存还能用作分布式锁、延时队列、限流等等。
什么是 Redis
Redis[1] REmote DIctionary Server是一个基于 C 语言开发的开源 NoSQL 数据库BSD 许可。与传统数据库不同的是Redis 的数据是保存在内存中的内存数据库支持持久化因此读写速度非常快被广泛应用于分布式缓存方向。并且Redis 存储的是 KV 键值对数据。
为了满足不同的业务场景Redis 内置了多种数据类型实现比如 String、Hash、Sorted Set、Bitmap、HyperLogLog、GEO。并且Redis 还支持事务、持久化、Lua 脚本、多种开箱即用的集群方案Redis Sentinel、Redis Cluster。 Redis 数据类型概览
Redis 没有外部依赖Linux 和 OS X 是 Redis 开发和测试最多的两个操作系统官方推荐生产环境使用 Linux 部署 Redis。
个人学习的话你可以自己本机安装 Redis 或者通过 Redis 官网提供的在线 Redis 环境[2]少部分命令无法使用来实际体验 Redis。 try-redis
全世界有非常多的网站使用到了 Redis techstacks.io[3] 专门维护了一个使用 Redis 的热门站点列表[4] 感兴趣的话可以看看。
Redis 为什么这么快
Redis 内部做了非常多的性能优化比较重要的有下面 3 点 Redis 基于内存内存的访问速度是磁盘的上千倍 Redis 基于 Reactor 模式设计开发了一套高效的事件处理模型主要是单线程事件循环和 IO 多路复用 Redis 内置了多种优化过后的数据类型/结构实现性能非常高。 下面这张图片总结的挺不错的分享一下出自 Why is Redis so fast?[5] 。 分布式缓存常见的技术选型方案有哪些
分布式缓存的话比较老牌同时也是使用的比较多的还是 Memcached 和 Redis。不过现在基本没有看过还有项目使用 Memcached 来做缓存都是直接用 Redis。
Memcached 是分布式缓存最开始兴起的那会比较常用的。后来随着 Redis 的发展大家慢慢都转而使用更加强大的 Redis 了。
有一些大厂也开源了类似于 Redis 的分布式高性能 KV 存储数据库例如腾讯开源的 Tendis[6] 。Tendis 基于知名开源项目 RocksDB[7] 作为存储引擎 100% 兼容 Redis 协议和 Redis4.0 所有数据模型。关于 Redis 和 Tendis 的对比腾讯官方曾经发过一篇文章Redis vs Tendis冷热混合存储版架构揭秘 可以简单参考一下。
不过从 Tendis 这个项目的 Github 提交记录可以看出Tendis 开源版几乎已经没有被维护更新了加上其关注度并不高使用的公司也比较少。因此不建议你使用 Tendis 来实现分布式缓存。
目前比较业界认可的 Redis 替代品还是下面这两个开源分布式缓存都是通过碰瓷 Redis 火的 Dragonfly[8]一种针对现代应用程序负荷需求而构建的内存数据库完全兼容 Redis 和 Memcached 的 API迁移时无需修改任何代码号称全世界最快的内存数据库。 KeyDB[9]Redis 的一个高性能分支专注于多线程、内存效率和高吞吐量。
不过个人还是建议分布式缓存首选 Redis 毕竟经过这么多年的生产考研生态也这么优秀资料也很全面。
说一下 Redis 和 Memcached 的区别和共同点
现在公司一般都是用 Redis 来实现缓存而且 Redis 自身也越来越强大了不过了解 Redis 和 Memcached 的区别和共同点有助于我们在做相应的技术选型的时候能够做到有理有据
共同点 都是基于内存的数据库一般都用来当做缓存使用。 都有过期策略。 两者的性能都非常高。
区别 Redis 支持更丰富的数据类型支持更复杂的应用场景。Redis 不仅仅支持简单的 k/v 类型的数据同时还提供 listsetzsethash 等数据结构的存储。Memcached 只支持最简单的 k/v 数据类型。 Redis 支持数据的持久化可以将内存中的数据保持在磁盘中重启的时候可以再次加载进行使用,而 Memcached 把数据全部存在内存之中。 Redis 有灾难恢复机制。 因为可以把缓存中的数据持久化到磁盘上。 Redis 在服务器内存使用完之后可以将不用的数据放到磁盘上。但是Memcached 在服务器内存使用完之后就会直接报异常。 Memcached 没有原生的集群模式需要依靠客户端来实现往集群中分片写入数据但是 Redis 目前是原生支持 cluster 模式的。 Memcached 是多线程非阻塞 IO 复用的网络模型Redis 使用单线程的多路 IO 复用模型。 Redis 6.0 针对网络数据的读写引入了多线程 Redis 支持发布订阅模型、Lua 脚本、事务等功能而 Memcached 不支持。并且Redis 支持更多的编程语言。 Memcached 过期数据的删除策略只用了惰性删除而 Redis 同时使用了惰性删除与定期删除。
相信看了上面的对比之后我们已经没有什么理由可以选择使用 Memcached 来作为自己项目的分布式缓存了。
为什么要用 Redis/为什么要用缓存
下面我们主要从“高性能”和“高并发”这两点来回答这个问题。
1、高性能
假如用户第一次访问数据库中的某些数据的话这个过程是比较慢毕竟是从硬盘中读取的。但是如果说用户访问的数据属于高频数据并且不会经常改变的话那么我们就可以很放心地将该用户访问的数据存在缓存中。
这样有什么好处呢 那就是保证用户下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存所以速度相当快。
2、高并发
一般像 MySQL 这类的数据库的 QPS 大概都在 1w 左右4 核 8g 但是使用 Redis 缓存之后很容易达到 10w甚至最高能达到 30w就单机 Redis 的情况Redis 集群的话会更高。 QPSQuery Per Second服务器每秒可以执行的查询次数 由此可见直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的所以我们可以考虑把数据库中的部分数据转移到缓存中去这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而我们也就提高了系统整体的并发。
常见的缓存读写策略有哪些
关于常见的缓存读写策略的详细介绍可以看我写的这篇文章3 种常用的缓存读写策略详解[10] 。
什么是 Redis Module有什么用
Redis 从 4.0 版本开始支持通过 Module 来扩展其功能以满足特殊的需求。这些 Module 以动态链接库so 文件的形式被加载到 Redis 中这是一种非常灵活的动态扩展功能的实现方式值得借鉴学习
我们每个人都可以基于 Redis 去定制化开发自己的 Module比如实现搜索引擎功能、自定义分布式锁和分布式限流。
目前被 Redis 官方推荐的 Module 有 RediSearch[11]用于实现搜索引擎的模块。 RedisJSON[12]用于处理 JSON 数据的模块。 RedisGraph[13]用于实现图形数据库的模块。 RedisTimeSeries[14]用于处理时间序列数据的模块。 RedisBloom[15]用于实现布隆过滤器的模块。 RedisAI[16]用于执行深度学习/机器学习模型并管理其数据的模块。 RedisCell[17]用于实现分布式限流的模块。 ……