文档章节

Redis 简单的使用

西门向东
 西门向东
发布于 2016/09/02 20:43
字数 487
阅读 40
收藏 3

首先看一下redis在Spring中的配置文件

<!-- redis连接池配置 -->
<bean id="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
   <property name="maxTotal" value="60" />
   <property name="maxIdle" value="30" />
   <property name="maxWaitMillis" value="100" />
   <property name="testOnBorrow" value="false" />
</bean>
<!-- jedisCluster配置 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
   <constructor-arg index="0">
      <set>
         <bean class="redis.clients.jedis.HostAndPort">
            <constructor-arg type="String" value="${redis0.host}" />
            <constructor-arg type="int" value="${redis0.port}" />
         </bean>
         <bean class="redis.clients.jedis.HostAndPort">
            <constructor-arg type="String" value="${redis1.host}" />
            <constructor-arg type="int" value="${redis1.port}" />
         </bean>
      </set>
   </constructor-arg>
   <constructor-arg index="1" ref="genericObjectPoolConfig" />
</bean>

开发中的redis的配置文件

ps: 相关的maven依赖可以自己去google百度等

缓存的泛型类

基本的类型

public class CacheObject<T> {
   
   public Boolean  needUpdate;
    public T  data;
   public Boolean getNeedUpdate() {
      return needUpdate;
   }
   public void setNeedUpdate(Boolean needUpdate) {
      this.needUpdate = needUpdate;
   }
   public T getData() {
      return data;
   }
   public void setData(T data) {
      this.data = data;
   }
   
}

 

集合类型

public class CacheListObject<T> {
 public Boolean  needUpdate;
 public List<T>  data;
public Boolean getNeedUpdate() {
   return needUpdate;
}
public void setNeedUpdate(Boolean needUpdate) {
   this.needUpdate = needUpdate;
}
public List<T> getData() {
   return data;
}
public void setData(List<T> data) {
   this.data = data;
}
 
}

使用缓存之后要泛型化的方法

public static<T>  CacheListObject<T>   getCacheListObject(String jsonResult,Class<T> clz){
      Type objectType = type(CacheListObject.class,clz);
      CacheListObject cacheListObject = gson.fromJson(jsonResult,objectType);
      return cacheListObject;
   }

   public static<T>  CacheObject<T>   getCacheObject(String jsonResult,Class<T> clz){
      Type objectType = type(CacheObject.class,clz);
      CacheObject<T> cacheObject = gson.fromJson(jsonResult,objectType);
      return cacheObject;
   }

   static ParameterizedType type(final Class raw, final Type... args) {
      return new ParameterizedType() {
         public Type getRawType() {
            return raw;
         }

         public Type[] getActualTypeArguments() {
            return args;
         }

         public Type getOwnerType() {
            return null;
         }
      };
}

 

public AccountInfo getAccountInfo(String account) throws Exception {
   AccountInfo accountInfo = null;
   String key="getAccountInfo_"+ account;
   if(jedisCluster.exists(key)){
      String value = jedisCluster.get(key);
      CacheObject<AccountInfo> cacheObject = Util.getCacheObject(value,AccountInfo.class);
      if(cacheObject.getNeedUpdate()){ // 判断账号是不是要更新
         accountInfo = getAccountInfoMgr(account); // 要更新的话直接从数据库拉取最新的数据
         cacheObject.setData(accountInfo);
         cacheObject.setNeedUpdate(false);
         String jsonAccountInfo = Util.coverToJson(cacheObject);
         jedisCluster.set(key,jsonAccountInfo);
      }else{
         accountInfo = cacheObject.getData();
         logger.info("开始从缓存中取账号信息 " + account);
      }
   }else{
       CacheObject<AccountInfo> accountInfoCacheObject = new CacheObject<AccountInfo>();
       accountInfo = getAccountInfoMgr(account);
      accountInfoCacheObject.setData(accountInfo);
      accountInfoCacheObject.setNeedUpdate(false);
      String jsonAccountInfo = Util.coverToJson(accountInfoCacheObject);
      jedisCluster.set(key,jsonAccountInfo);
   }
   return accountInfo;
}


public AccountInfo getAccountInfoMgr(String account) throws Exception {
   if (Util.isEmpty(account)) {
      throw new Exception("获取用户信息失败,用户ID不能为空!");
   }
   Account acc = accDao.findAccount(account);
   if (acc == null) {
      throw new Exception("获取用户信息失败,用户ID不存在!" + account);
   }
   AccountInfo info = getInfo(acc);
   return info;
}

© 著作权归作者所有

西门向东
粉丝 1
博文 15
码字总数 7122
作品 0
大连
私信 提问
手把手教你编写入门级redis客户端

摘要:既然Redis客户端已经这么丰富了,为什么还要尝试自己编写客户端?我的看法是,知己知彼,自己尝试制作Redis客户端,不仅可以加深对Redis的了解,而且可以通晓Redis客户端的原理,为今后...

阿里云云栖社区
2017/12/04
0
0
Redis 简介及在 Linux 下的编译安装

Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lis...

鉴客
2011/07/18
2.2K
1
Redis探索之旅(2)- 在Windows下搭建单实例Redis服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andamajing/article/details/52424468 在上一篇文章中,我们简单描述了什么是Redis及其相关特性,当然知道这些...

DreamMakers
2016/09/03
0
0
springboot使用redis做缓存

前面写过springboot实现session共享,可以参考《springboot中redis的使用和分布式session共享问题》、《再谈session共享》、《又双叒叕来session共享》。本文和道友们一起看下如果使用redis...

小尘哥
2018/12/06
0
0
centos---存储系统 Redis 简介及编译安装

Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lis...

durban
2012/03/20
335
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
42分钟前
3
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
4
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部