redis实现spring-redis-data的入门实例

redis的客户端实现、主要分为spring-redis-data 、jredis。

记录下spring-redis-data的学习心得;
spring-redis-data 中我目前主要用了它的存、取、清除。

redis配置redis-manager-config.properties :

redis.host=192.168.1.20//redis的服务器地址
redis.port=6400//redis的服务端口
redis.pass=1234xxxxx//密码
redis.default.db=0//链接数据库
redis.timeout=100000//客户端超时时间单位是毫秒
redis.maxActive=300// 最大连接数
redis.maxIdle=100//最大空闲数
[html] view plaincopy
redis.maxWait=1000//最大建立连接等待时间
redis.testOnBorrow=true//指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个

spring 中配置

<bean id="propertyConfigurerRedis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="1" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="locations">
            <list>
                <value>classpath:config/redis-manager-config.properties</value>
            </list>
        </property>
    </bean>

<!-- jedis pool配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxActive" value="${redis.maxActive}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxWait" value="${redis.maxWait}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

<!-- spring data redis -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="usePool" value="true"></property>
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <property name="password" value="${redis.pass}" />
        <property name="timeout" value="${redis.timeout}" />
        <property name="database" value="${redis.default.db}"></property>
        <constructor-arg index="0" ref="jedisPoolConfig" />
    </bean>

<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
    </bean>
<!--配置一个基础类(之后的业务类继承于该类)、将redisTemplate注入 -->
<bean id="redisBase" abstract="true">
  <property name="template" ref="redisTemplate"></property>
 </bean>

java代码:

复制代码代码示例:

public class RedisBase {
    private StringRedisTemplate template;

/**
     * @return the template
     */
    public StringRedisTemplate getTemplate() {
        return template;
    }

/**
     * @param template the template to set
     */
    public void setTemplate(StringRedisTemplate template) {
        this.template = template;
    }

}

继续:
具体redis的值的写入、读出、清除缓存!
第一:写入

复制代码代码示例:

public class StudentCountDO {
      private Long id;
         private String studentId;
          private Long commentHeadCount;
         private Long docAttitudeScores;
         private Long guideServiceScores;
          private Long treatEffectCount;
         private Long treatEffectScores;
      private String gmtModified;
      private String gmtCreated;
          private Long waitingTimeScores;
     }

StringRedisTemplate template = getTemplate();//获得上面注入的template
       // save as hash 一般key都要加一个前缀,方便清除所有的这类key
       BoundHashOperations<String, String, String> ops = template.boundHashOps("student:"+studentCount.getStudentId());

Map<String, String> data = new HashMap<String, String>();
       data.put("studentId", CommentUtils.convertNull(studentCount.getStudentId()));
       data.put("commentHeadCount", CommentUtils.convertLongToString(studentCount.getCommentHeadCount()));
       data.put("docAttitudeScores", CommentUtils.convertLongToString(studentCount.getDocAttitudeScores()));
       data.put("guideServicesScores", CommentUtils.convertLongToString(studentCount.getGuideServiceScores()));
       data.put("treatEffectCount", CommentUtils.convertLongToString(studentCount.getTreatEffectCount()));
       data.put("treatEffectScores", CommentUtils.convertLongToString(studentCount.getTreatEffectScores()));
       data.put("waitingTimeScores", CommentUtils.convertLongToString(studentCount.getWaitingTimeScores()));
       try {
           ops.putAll(data);
       } catch (Exception e) {
           logger.error(CommentConstants.WRITE_EXPERT_COMMENT_COUNT_REDIS_ERROR + studentCount.studentCount(), e);
       }

第二、 取出

复制代码代码示例:

public StudentCountDO getStudentCommentCountInfo(String studentId) {
       final String strkey = "student:"+ studentId;
       return getTemplate().execute(new RedisCallback<StudentCountDO>() {
           @Override
           public StudentCountDO doInRedis(RedisConnection connection) throws DataAccessException {
               byte[] bkey = getTemplate().getStringSerializer().serialize(strkey);
               if (connection.exists(bkey)) {
                   List<byte[]> value = connection.hMGet(bkey,
                           getTemplate().getStringSerializer().serialize("studentId"), getTemplate()
                                   .getStringSerializer().serialize("commentHeadCount"), getTemplate()
                                   .getStringSerializer().serialize("docAttitudeScores"), getTemplate()
                                   .getStringSerializer().serialize("guideServicesScores"), getTemplate()
                                   .getStringSerializer().serialize("treatEffectCount"), getTemplate()
                                   .getStringSerializer().serialize("treatEffectScores"), getTemplate()
                                   .getStringSerializer().serialize("waitingTimeScores"));
                   StudentCountDO studentCommentCountDO = new StudentCountDO();
                   studentCommentCountDO.setExpertId(getTemplate().getStringSerializer().deserialize(value.get(0)));
                   studentCommentCountDO.setCommentHeadCount(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(1))));
                   studentCommentCountDO.setDocAttitudeScores(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(2))));
                   studentCommentCountDO.setGuideServiceScores(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(3))));
                   studentCommentCountDO.setTreatEffectCount(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(4))));
                   studentCommentCountDO.setTreatEffectScores(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(5))));
                   studentCommentCountDO.setWaitingTimeScores(Long.parseLong(getTemplate().getStringSerializer()
                           .deserialize(value.get(6))));
                   return studentCommentCountDO;
               }
               return null;
           }
       });
}

这个存和取的过程其实是把对象中的各个字段序列化之后存入到hashmap 、取出来的时候在进行按照存入进去的顺序进行取出。
第三 清除
这个就根据前面的前缀很简单了,一句代码就搞定啦!

复制代码代码示例:

private void clear(String pattern) {
       StringRedisTemplate template = getTemplate();
       Set<String> keys = template.keys(pattern);
       if (!keys.isEmpty()) {
           template.delete(keys);
       }
}

pattern传入为student: 即可将该类型的所有缓存清除掉!

时间: 2024-11-02 04:27:57

redis实现spring-redis-data的入门实例的相关文章

Spring中IoC的入门实例

Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如果来使用的. 数据模型 1.如下图所示有三个类,Human(人类)是接口,Chinese(中国人)是一个子类,American(美国人)是另外一个子类. 源代码如下: package cn.com.chengang.spring;public interface Human {void eat();

【redis】基于redis实现分布式并发锁

基于redis实现分布式并发锁(注解实现) 说明 前提, 应用服务是分布式或多服务, 而这些"多"有共同的"redis"; GitHub: https://github.com/vergilyn/SpringBootDemo 代码结构: 一.分布式并发锁的几种可行方案 (具体实现思路参考: 分布式锁的实现.如何用消息系统避免分布式事务?) 1.基于数据库 可以用数据库的行锁for update, 或专门新建一张锁控制表来实现. 过于依赖数据库, 且健壮性也不是特别好

spring redis入门

小二,上菜!!! 1. 虚拟机上安装redis服务 下载tar包,wget http://download.redis.io/releases/redis-2.8.19.tar.gz. 解压缩,tar -zxvf redis-2.8.19.tar.gz 进到文件夹,cd redis-2.8.19/,编译一下,make 创建空文件夹用于存放redis程序,mkdir /usr/local/redis 把编译后的产物依次复制到redis文件夹下 1) 编译后src文件夹下 红色部分文件都分别复制过去

Redis入门实例

在此之前,对Redis有必要清楚以下问题: Redis是什么? Redis解决了什么问题? Redis的优势? 如何使用Redis?(本文重点) Redis是什么 首先看官网的定义: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 所以,Redis是一个key-value的内存数据库.不过Redis在生产环境中使用最多的功能是缓存系统.至于其他作用比如数据库和消息中间件,则不会展开. Redis解决了什么问题 在大型网站技术架构中,缓存系统

Redis整合Spring结合使用缓存实例

摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的方法切入到有需要进入缓存的类或方法前面. 一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set –有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作

Redis整合Spring结合使用缓存实例(转)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的方法切入到有需要进入缓存的类或方法前面. 一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和h

redis与spring整合实例

1)首先是redis的配置. 使用的是maven工程,引入redis与spring整合的相关jar包 <!-- redis服务 start--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> &

分布式缓存技术redis学习系列----深入理解Spring Redis的使用

关于spring redis框架的使用,网上的例子很多很多.但是在自己最近一段时间的使用中,发现这些教程都是入门教程,包括很多的使用方法,与spring redis丰富的api大相径庭,真是浪费了这么优秀的一个框架.Spring-data-redis为spring-data模块中对redis的支持部分,简称为"SDR",提供了基于jedis客户端API的高度封装以及与spring容器的整合,事实上jedis客户端已经足够简单和轻量级,而spring-data-redis反而具有&quo

Redis 缓存 + Spring 的集成示例(转)

<整合 spring 4(包括mvc.context.orm) + mybatis 3 示例>一文简要介绍了最新版本的 Spring MVC.IOC.MyBatis ORM 三者的整合以及声明式事务处理.现在我们需要把缓存也整合进来,缓存我们选用的是 Redis,本文将在该文示例基础上介绍 Redis 缓存 + Spring 的集成.关于 Redis 服务器的搭建请参考博客<Redhat5.8 环境下编译安装 Redis 并将其注册为系统服务>. 1. 依赖包安装 pom.xml