机械行业网站建设,小企业网站建设论文,上海网页设计制作培训,新浪sae搭建wordpress文章目录 为什么要用 Redis 而不用 map/guava 做缓存?Redis为什么这么快Redis有哪些数据类型Redis的应用场景总结一计数器缓存会话缓存全页缓存#xff08;FPC#xff09;查找表消息队列(发布/订阅功能)分布式锁实现 总结二 简单的聊聊Redis常见的一些疑问点#xff1a;具体… 文章目录 为什么要用 Redis 而不用 map/guava 做缓存?Redis为什么这么快Redis有哪些数据类型Redis的应用场景总结一计数器缓存会话缓存全页缓存FPC查找表消息队列(发布/订阅功能)分布式锁实现 总结二 简单的聊聊Redis常见的一些疑问点具体问题如下标题中 为什么要用 Redis 而不用 map/guava 做缓存?
缓存分为本地缓存和分布式缓存。以 Java 为例使用自带的 map 或者 guava 实现的是本地缓存最主要的特点是轻量以及快速生命周期随着 jvm 的销毁而结束并且在多实例的情况下每个实例都需要各自保存一份缓存缓存不具有一致性。
使用 redis 或 memcached 之类的称为分布式缓存在多实例的情况下各实例共用一份缓存数据缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用整个程序架构上较为复杂。
Redis为什么这么快
1、完全基于内存绝大部分请求是纯粹的内存操作非常快速。数据存在内存中类似于 HashMapHashMap 的优势就是查找和操作的时间复杂度都是O(1)
2、数据结构简单对数据操作也简单Redis 中的数据结构是专门进行设计的
3、采用单线程避免了不必要的上下文切换和竞争条件也不存在多进程或者多线程导致的切换而消耗 CPU不用去考虑各种锁的问题不存在加锁释放锁操作没有因为可能出现死锁而导致的性能消耗
4、使用多路 I/O 复用模型非阻塞 IO
5、使用底层模型不同它们之间底层实现方式以及与客户端之间通信的应用协议不一样Redis 直接自己构建了 VM 机制 因为一般的系统调用系统函数的话会浪费一定的时间去移动和请求
Redis有哪些数据类型
Redis主要有5种数据类型包括StringListSetZsetHash满足大部分的使用要求
Redis的应用场景
总结一
计数器
可以对 String 进行自增自减运算从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高很适合存储频繁读写的计数量。
缓存
将热点数据放到内存中设置内存的最大使用量以及淘汰策略来保证缓存的命中率。
会话缓存
可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息也就不再具有状态一个用户可以请求任意一个应用服务器从而更容易实现高可用性以及可伸缩性。
全页缓存FPC
除基本的会话token之外Redis还提供很简便的FPC平台。以Magento为例Magento提供一个插件来使用Redis作为全页缓存后端。此外对WordPress的用户来说Pantheon有一个非常好的插件 wp-redis这个插件能帮助你以最快速度加载你曾浏览过的页面。
查找表
例如 DNS 记录就很适合使用 Redis 进行存储。查找表和缓存类似也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效而缓存的内容可以失效因为缓存不作为可靠的数据来源。
消息队列(发布/订阅功能)
List 是一个双向链表可以通过 lpush 和 rpop 写入和读取消息。不过最好使用 Kafka、RabbitMQ 等消息中间件。
分布式锁实现
在分布式场景下无法使用单机环境下的锁来对多个节点上的进程进行同步。可以使用 Redis 自带的 SETNX 命令实现分布式锁除此之外还可以使用官方提供的 RedLock 分布式锁实现。
其它
Set 可以实现交集、并集等操作从而实现共同好友等功能。ZSet 可以实现有序性操作从而实现排行榜等功能。
总结二
Redis相比其他缓存有一个非常大的优势就是支持多种数据类型。
数据类型说明string字符串最简单的k-v存储hashhash格式value为field和value适合ID-Detail这样的场景。list简单的list顺序列表支持首位或者末尾插入数据set无序list查找速度快适合交集、并集、差集处理sorted set有序的set
其实通过上面的数据类型的特性基本就能想到合适的应用场景了。
string——适合最简单的k-v存储类似于memcached的存储结构短信验证码配置信息等就用这种类型来存储。
hash——一般key为ID或者唯一标示value对应的就是详情了。如商品详情个人信息详情新闻详情等。
list——因为list是有序的比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。因为list是有序的适合根据写入的时间来排序如最新的***消息队列等。
set——可以简单的理解为ID-List的模式如微博中一个人有哪些好友set最牛的地方在于可以对两个set提供交集、并集、差集操作。例如查找两个人共同的好友等。
Sorted Set——是set的增强版本增加了一个score参数自动会根据score的值进行排序。比较适合类似于top 10等不根据插入的时间来排序的数据。
如上所述虽然Redis不像关系数据库那么复杂的数据结构但是也能适合很多场景比一般的缓存数据结构要多。了解每种数据结构适合的业务场景不仅有利于提升开发效率也能有效利用Redis的性能。