//场景,给定一个订单号来从缓存中查询一个订单信息;

步骤: 1从redis中直接获取,有数据就返回

2.如果redis中没有值,就查数据库

3.数据库查到的数据不为空,就刷到redis中

4.返回查到的数据

  一般的代码写法:

 public ShopOrderMast get(String orderId){
// 1从redis中直接获取,有数据就返回
String orderStr = redisUtil.string_get(orderId);
if(StringUtils.isNotBlank(orderStr)){
return JSON.parseObject(orderStr,ShopOrderMast.class);
}
// 2.如果redis中没有值,就查数据库
ShopOrderMast orderMast = shopOrderMastMapper.selectOrderByCodOrderId(orderId); // 3.数据库查到的数据不为空,就刷到redis中
if(null!=orderMast){
redisUtil.string_set(orderId,JSON.toJSONString(orderMast),1000);
}
// 4.返回查到的数据
return orderMast;
}

//优雅的做法
public abstract class RedisCacheUtil {

    //从redis中获取
public interface CacheFactory<K,V>{ V get(K key);
}
//从数据库获取
public interface RealObjectFactory<K,V>{ V get(K key);
}
//刷到缓存
public interface FlushCaheFactory<K,V>{ void flush(K key,V v);
}
//获取缓存key的值
public static <K,V> V get(K key,CacheFactory<K,V> cacheFactory,RealObjectFactory<K,V> realFactory,FlushCaheFactory<K,V> flushCaheFactory){
//先从缓存获取
V v = cacheFactory.get(key);
if(null!=v){
return v;
}
//缓存不存在,就从数据库获取
v = realFactory.get(key);
if(null!=v){
//重新刷到缓存
flushCaheFactory.flush(key,v);
}
return v;
}
}

//根据上面的工具类,改造获取订单的缓存方法,可以使用lambda表达式
 public ShopOrderMast getByRedis(String orderId){
return RedisCacheUtil.get(orderId, key -> {
String orderStr = redisUtil.string_get(orderId);
if(StringUtils.isNotBlank(orderStr)){
return JSON.parseObject(orderStr,ShopOrderMast.class);
}
return null;
}, key -> shopOrderMastMapper.selectOrderByCodOrderId(orderId),
(key, orderMast) -> redisUtil.string_set(orderId,JSON.toJSONString(orderMast),1000));}

 

 

如何高雅的使用redis去获取一个值的更多相关文章

  1. js 从数组中随机获取一个值

    // 获取随机数 var rand = Math.floor( Math.random() * this.peoples.length ); // 随机从数组中取出某值(不会改变原数组) var da ...

  2. 【python】Python的字典get方法:从字典中获取一个值

    转自: http://blog.sina.com.cn/s/blog_6be89284010183xm.html

  3. C#获取一个文件的扩展名

    C#获取一个文件的扩展名System.IO.Path.GetExtension( "文件名 ");ChangeExtension   更改路径字符串的扩展名. Combine   ...

  4. Yii2 提供可以用属性的方式去获取类的一个方法

    刚开始用 Yii 的小朋友可能对下面的写法非常疑惑: public function actionIndex() { $user = User::find()->where(['name'=&g ...

  5. Jmeter连接Redis,获取Redis数据集

    Redis(REmote DIctionary Server)是一个开源的内存数据结构存储,用作数据库,缓存和消息代理. 本博文是分享jmeter怎么连接使用Redis数据库. 安装Redis数据集J ...

  6. openstack数据库获取一个虚机的floating_ip, fix_ip, project_name, user_name, hostname, host

     转载请注明 http://www.cnblogs.com/juandx/p/5418204.html openstack有3个库,nova,neutron,keystone,我现在需要做的是跨库联表 ...

  7. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  8. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。

    首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一.  类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...

  9. 获取一个字符串中每一个字母出现的次数使用map集合

    package 获取字符串中单字符出现次数; import java.util.Scanner; import java.util.TreeMap; /* * 需求:获取一个字符串中每一个字母出现的次 ...

随机推荐

  1. C语言基础练习——打印乘法口诀表

    C语言基础练习--打印乘法口诀表 JERRY_Z. ~ 2020 / 8 / 26 转载请注明出处! 代码: /* * @Author: JERRY_Z. * @Date: 2020-08-26 16 ...

  2. Java面试题(Java Web篇)

    Java Web 64.jsp 和 servlet 有什么区别? jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将 ...

  3. zero:seo优化的三部曲

    http://www.wocaoseo.com/thread-230-1-1.html 理解用户的需求.了解搜索引擎的原理.明白如何通过搜索引擎优化对网站产生价值,这是SEO学习中应该陆续深入的三个部 ...

  4. [ASP.NET Core开发实战]基础篇06 配置

    配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...

  5. 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    [Go语言入门系列]前面的文章: [Go语言入门系列](五)指针和结构体的使用 [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? 1. Go是面向对象的语言吗? 在[ ...

  6. 【JAVA】给大家推荐一道有意思的java测试题。你知道答案吗?

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 公众号:程序员小冰 public class Test { /** * * ...

  7. docker搭建zabbix收集windows计数器性能数据

    1 docker服务的安装 1)在线安装docker服务 在线安装可以参考下面的安装步骤 a 安装相关依赖组件 yum install -y yum-utils device-mapper-persi ...

  8. P4609 建筑师

    题目描述 小 Z 是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建 n 个建筑,每个建筑的高度是 1 到 n 之间的一个整数. 小 Z 有很严重的强迫症,他不喜欢有两个建筑的高度相同. ...

  9. C III

    http://cossacksworld.ucoz.co.uk/load/c_iii_files/79 http://cossacksworld.ucoz.co.uk/load/c_iii_files ...

  10. Inscribed Figures(思维)

    The math faculty of Berland State University has suffered the sudden drop in the math skills of enro ...