dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(五)Spring中spring-data-redis的使用

前面已经写了四篇关于dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合的文章:

  1. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(一)Dubbo的使用
  2. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(二)之 JDBC连接池、监控组件 Druid
  3. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(三)使用Spring AOP实现mysql的读写分离
  4. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(四)Spring AOP中使用log4j实现http请求日志入mongodb

今天继续写一篇关于Spring中spring-data-redis的使用。

Redis是一种特殊的类型的数据库,它被称为一种key-value存储。key-value存储保存的是键值对。实际上,key-value存储于哈希Map有很大的相似。
spring data是一种面向模板的数据访问,能够在使用Redis的时候,为我们提供了帮助。于是就有了spring-data-redis。

1. spring-data-redis的简介

spring-data-redis包含了多个模板实现,用来完成Redis数据库的存取功能。创建spring-data-redis模板之前,我们首先需要一个Redis连接工厂,spring-data-redis提供了四个连接工厂供我们选择。

2.spring-data-redis所需要依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.6.2.RELEASE</version>
        </dependency>

3. spring-data-redis的使用

3.1 连接到Redis

Redis连接工厂会生成到Redis数据库服务器的连接。spring-data-redis为四种Redis客户端实现了连接工厂:

  • JedisConnectionFactory
  • JredisConnectionFactory
  • LettuceConnectionFactory
  • SrpConnectionFactory

    具体选择哪一种取决于自己。

(1)创建redis.properties:

maxTotal=8
#最大空闲时间
maxIdle=8
#最短空闲时间
minIdle=0
#最大的等待时间
maxWaitMillis=6000
#Redis的连接地址
hostR=127.0.0.1
#端口
portR=6379

(2)创建spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd">

    <!-- 引入redis.properties配置文件-->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location" value="classpath:redis.properties" /> </bean> 

    <!-- redis连接池的配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${maxTotal}" />
        <property name="maxIdle" value="${maxIdle}" />
        <property name="minIdle" value="${minIdle}" />
        <property name="maxWaitMillis" value="10000" />
        <property name="minEvictableIdleTimeMillis" value="300000"></property> 
        <property name="numTestsPerEvictionRun" value="3"></property> 
        <property name="timeBetweenEvictionRunsMillis" value="60000"></property> 
   </bean>
    <!-- 工厂类配置 -->
    <bean id="jedisConnectionFactory"
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${hostR}" />
        <property name="port" value="${portR}" />
        <property name="poolConfig" ref="jedisPoolConfig" />
         <property name="timeout" value="15000"></property> 
        <property name="usePool" value="true"></property> 
    </bean>

    <!-- redisTemplate配置 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
        <property name="keySerializer">
            <bean
                class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean
                class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <property name="enableTransactionSupport" value="true" />
    </bean>

</beans>

以上是我配置的jedisPoolConfig,jedisConnectionFactory,redisTemplate。

3.2 使用RedisTemplate

Redis连接工厂会生成到Redis key-value存储的连接(以RedisConnection的形式。)借助RedisConnection,可以存储和读取数据。

spring-redis-data以模板的形式提供了较好等级的数据访问方案。实际上,spring-data-redis提供了两个模板:

  • RedisTemplate
  • StringRedisTemplate

其中RedisTemplate使用两个类型进行了参数。第一个参数是key的类型,第二个参数是value的类型,而StringRedisTemplate是RedisTemplate的扩展,只关注String类型,也就是key和vlaue都是String类型。

3.2.1 RedisTemplate使用简单值

假设我们想通过RedisTemplate

  public class UserRedisDaoImp extends AbstractBaseRedisTemplete<User> 
              implements IUserRedisDao {

    @Override
    public User findById(String key) {
        return (User) redisTemplate.opsForValue().get(key);
    }

    @Override
    public void saveUser(String key,User user) {
         redisTemplate.opsForValue().set(key, user);
    }

}
3.2.2 RedisTemplate使用List值

使用List类型的value与之类似,只需要使用opForList()方法,

package com.lidong.core.user.dao;

import java.util.List;

import com.lidong.model.user.User;
import com.lidong.util.AbstractBaseRedisTemplete;

public class UserRedisDaoImp extends AbstractBaseRedisTemplete<User> 
              implements IUserRedisDao {

    @Override
    public List<User> getUserList(String key,long start,long end) {
         return  redisTemplate.opsForList().range(key, 0, end);
    }

    @Override
    public Long addUserToUserList(String key, User user) {
        return redisTemplate.opsForList().leftPush(key, user);

    }

}
3.2.3 RedisTemplate使用Set值

除了使用List类型和value类型,我们还可以使用opForSet()的方法操作Set,最为常用的的就是向Set中添加一个元素:

@Override
    public void saveUser(String key,User user) {
         redisTemplate.opsForSet().add(key, user);
    }

在我们有多个Set,并对这些Set集合进行差、交、并的操作。

 Set<User> difference = redisTemplate.opsForSet().difference("users1", "users2");
          Set<User> union = redisTemplate.opsForSet().union("users1", "users2");
          Set<User> intersect = redisTemplate.opsForSet().intersect("users1", "users2");
          //我还可以移除Set中的元素
          Long remove = redisTemplate.opsForSet().remove("user1", user);
3.2.4 RedisTemplete绑定到某个key上

我们可以将Value、List、Set等可以绑定到指定的key上。这些用个的不太多,但是也简单。这里就不具体写了。

3.2.5 构造AbstractBaseRedisTemplete
package com.lidong.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.redis.core.RedisTemplate;
/**
 * 基础的RedisTemplete
 * @author lidong
 * @param <T>
 * @date 2017-1-5
 */
public abstract class AbstractBaseRedisTemplete<T> implements
        ApplicationContextAware {


    protected RedisTemplate<String,T>  redisTemplate;

     /** 
     * @Description RedisTemplate 
     * @param redisTemplate 
     */  
    public void setRedisTemplate(RedisTemplate<String,T> redisTemplate) {  
        this.redisTemplate = redisTemplate;  
    }  

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        @SuppressWarnings("unchecked")
        RedisTemplate<String,T> redisTemplate = applicationContext.getBean(  
                "redisTemplate", RedisTemplate.class);  
        setRedisTemplate(redisTemplate); 
    }

}

Spring-Data-Redis的使用基本最常用 的就是这三种类型value类型、List类型、Set类型。

代码地址

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: dubbo-spring-boot-starter是一个基于Spring Boot框架的Dubbo服务框架的启动器。它可以帮助开发者快速集成Dubbo服务框架到Spring Boot应用,简化了Dubbo服务的配置和使用。通过使用dubbo-spring-boot-starter,开发者可以更加方便地实现Dubbo服务的注册、发现、调用等功能,提高了开发效率和代码质量。 ### 回答2: Dubbo-Spring-Boot-Starter是一款用于在Spring Boot应用接入Apache Dubbo的开源框架。它可以帮助开发人员快速、方便地实现DubboSpring Boot项目的集成和使用Dubbo是基于Java的高性能、轻量级分布式服务框架,帮助开发者更轻松、更透明地构建分布式服务,同时它也是阿里巴巴开源的一款优秀的分布式框架。然而,Dubbo使用过程存在一些繁琐的配置,为开发人员增加了很多工作量和麻烦,而Dubbo-Spring-Boot-Starter则是为了消除这些繁琐的配置和使用难度而产生的。 在使用Dubbo-Spring-Boot-Starter之后,开发人员可以将DubboSpring Boot框架快速整合,并通过简单的配置实现Dubbo的相关功能,比如注册心、服务提供者和服务消费者等。在使用过程Dubbo-Spring-Boot-Starter为开发人员提供了大量的自动化配置和默认值,比如默认的Dubbo协议、负载均衡策略、超时时间等,同时支持自定义扩展自动配置的方式。此外,Dubbo-Spring-Boot-Starter还提供了一些Web端的监控和管理功能,帮助开发人员更方便地进行运维和监控。 总之,Dubbo-Spring-Boot-Starter是对DubboSpring Boot框架的完美结合,它简化了DubboSpring Boot项目使用和配置,提高了开发效率,降低了使用成本,是一款值得开发人员尝试的框架。 ### 回答3: Dubbo-spring-boot-starter是Spring Boot与Dubbo框架集成的一个starter,它提供了快速集成Dubbo框架的能力。Dubbo是一款分布式的服务治理框架,支持高性能的异步通信,并提供了负载均衡、服务降级、集群容错等丰富的特性。 Dubbo-spring-boot-starter包含了Dubbo所需的基本配置信息,只需要在Spring Boot项目的配置文件添加相应的配置即可快速集成Dubbo框架。通过简单的配置,Dubbo-spring-boot-starter能够让Spring Boot项目成为Dubbo服务的提供者或消费者。 Dubbo-spring-boot-starter的使用非常方便,只需要在项目添加对应的依赖即可开始使用,它提供了多种配置方式,如注解、XML和properties等。同时,Dubbo-spring-boot-starter也提供了丰富的自定义配置选项,可以满足不同场景的需求。 除了Dubbo-spring-boot-starter,还有其他与Dubbo框架集成的starter,如dubbo-spring-cloud-starter和dubbo-spring-boot-project。这些starter都提供了方便快捷的Dubbo集成方式,使得Dubbo框架在Spring Boot生态的应用更加广泛。 总之,Dubbo-spring-boot-starter是一款优秀的starter,可以让Spring Boot项目快速集成Dubbo框架,提供或消费Dubbo服务,为分布式服务治理带来便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值