缓存系列文章--5.缓存穿透问题
解决缓存穿透 | 适用场景 | 维护成本 |
缓存空对象 | 1. 数据命中不高 2. 数据频繁变化实时性高 | 1.代码维护简单 2.需要过多的缓存空间 3. 数据不一致 |
bloomfilter或者压缩filter提前拦截 | 1. 数据命中不高 2. 数据相对固定实时性低 | 1.代码维护复杂 2.缓存空间占用少 |
package com.carlosfu.service; import org.apache.commons.lang.StringUtils; import com.carlosfu.cache.Cache; import com.carlosfu.storage.Storage; /** * 某服务 * * @author carlosfu * @Date 2015-10-11 * @Time 下午6:28:46 */ public class XXXService { /** * 缓存 */ private Cache cache = new Cache(); /** * 存储 */ private Storage storage = new Storage(); /** * 模拟正常模式 * @param key * @return */ public String getNormal(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringUtils.isBlank(cacheValue)) { // 从存储中获取 String storageValue = storage.get(key); // 如果存储数据不为空,将存储的值设置到缓存 if (StringUtils.isNotBlank(storageValue)) { cache.set(key, storageValue); } return storageValue; } else { // 缓存非空 return cacheValue; } } /** * 模拟防穿透模式 * @param key * @return */ public String getPassThrough(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringUtils.isBlank(cacheValue)) { // 从存储中获取 String storageValue = storage.get(key); cache.set(key, storageValue); // 如果存储数据为空,需要设置一个过期时间(300秒) if (StringUtils.isBlank(storageValue)) { cache.expire(key, 60 * 5); } return storageValue; } else { // 缓存非空 return cacheValue; } } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Mahout学习之命令行创建序列文件
一:命令行转换 创建新的工作目录 mkdir lastfm mkdir ./lastfm/original export WORK_DIR=/home/thinkgamer/document/lastfm cd $WORK_DIR 自己准备一个数据集放在original文件夹下,例如将点击打开链接下边的数据保存在synthetic_control.data中进行转换,首先将其放在origiinal文件夹中 进入mahout的安装目录,前提是hadoop环境是启动的 cd /usr/local/hadoop/mahout bin/mahout seqdirectory -i $WORK_DIR/original -o $WORK_DIR/sequencesfile 然后进入$WORK_DIR目录下有一个sequencesfile文件夹 cd $WORK_DIR cd sequencesfile ls 会显示如下: part-m-00000 _SUCCESS 命令行查看part-m-00000的文件内容为: bin/mahout seqdumper -i $WORK_DIR/sequenc...
- 下一篇
Hbase与hive整合
//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' whth serdeproperties("hbase.columns.mapping" = ':key,cf1:score')tblproperties("hbase.table.name" = "hbase_lecture10"); with serdeproperties : 指定属性,这里指定Hbase表和hive的字段映射关系,注意这里的字段个数和顺序必须和前面Hive表的属性保持一致。第一个字段:key映射到Hive中的sname字段,后面字段依此类推。 //加载数据,可以通过Hive支持的insert overwrite方式将一个表的数据导入HBase. (耗时异常长)insert overwrite table lecture.hbase_lectrure10 Select sname, score...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8编译安装MySQL8.0.19