Spring整合Redis

前言
Spring整合Redis的环境可以使用搭建好的ssm环境下进行构建,方(懒)便(人)快(专)捷(用),首推!

@

1、准备依赖Jar包

<!-- ================  spring   整合  Redis================== -->

<!-- 1、java连接Redis的jar包,也就是使用jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.4.2</version>
    </dependency>
    
<!-- 2、spring整合Redis的jar包 -->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.4.2.RELEASE</version>
    </dependency>

1.1、Jedis概述

是的,在上面使用到了Jedis的jar包,这里简单介绍一下Jedis。

Java客户端访问Redis有JedisRedissonJredisJDBC-Redis等,其中官方推荐使用Jedis和Redisson。常用Jedis。Jedis的操作跟使用原生的Redis命令来操作是基本一致的,或者说,Jedis其实就是原生命令的Java实现,好处是使用起来非常方便,不用再去记忆其他的API,缺点是偏底层了一些,有一些内容还是需要我们手动封装处理。对于初学者来说,Jedis上手更快,更能适应。

2、Spring-redis.xml 中的配置

在spring的xml中开始如下配置:

2.1、配置连接池信息

<!-- 1、配置连接池信息 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大连接数-->
        <property name="maxTotal" value="50"></property>
        <property name="maxIdle" value="5"></property>
        <!-- 这里只是Spring整合Redis测试,配两个做个样子就得了-->
    </bean>

当然配置的话,redis.clients.jedis.JedisPoolConfig中也有默认的配置信息!毕竟是魔是仙我自己说了才算。
在这里插入图片描述

2.2、配置连接池信息

<!--2、spring整合Jedis(Redis) 也就是配置连接工厂JedisConnectionFactory-->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!--需要自定义(指定)一些工厂属性配置信息-->
        <!--        指定服务器地址-->
        <property name="hostName" value="192.168.113.231"></property>
        <!--        指定服务端口号-->
        <property name="port" value="6379"></property>
        <!--        指定密码(Redis3之前可以不指定,之后都要)-->
        <property name="password" value="yichun"></property>

        <!--   自定义连接池配置:再把第一步配置好的连接池信息通过属性注入进来  如果不自定义会采用默认的连接池配置,工厂中有属性new JedisPoolConfig-->
        <property name="poolConfig" ref="jedisPoolConfig"></property>
    </bean>

把第一步配置好的连接池信息通过属性注入进来 如果不自定义会采用默认的连接池配置,工厂中有属性new JedisPoolConfig,如下:
在这里插入图片描述

2.3、配置RedisTemplate模板

既然配置RedisTemplate模板,那么我们就来认识认识下RedisTemplate模板。

RedisTemplate概述
Spring-data-redis提供了RedisTemplate来实现Redis的访问操作,它封装了redis连接池管理的逻辑,业务代码无须关心获取,释放连接逻辑;spring redis同时支持了Jedis、Jredis、rjc 客户端操作; 在RedisTemplate中提供了几个常用的接口方法的使用,里面的方法分别存着操作Redis的字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等多种数据类型。

RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。

在这里插入图片描述

配置RedisTemplate模板

<!--    3、配置RedisTemplate模板   把第二步配置好的连接工厂JedisConnectionFactory通过属性注入到RedisTemplate模板中-->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
 
 
    <!--如下配置是为了之后的key和value的序列化操作,暂时不配制也是OK的-->
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
    </bean>

具体可以自行进行进入源码观看,下面贴个自个的简单分析:
在这里插入图片描述

3、service代码编写

首先编写个接口

package com.gx.service;

public interface RedisUserService {
    public String getString(String key);
}

再编写service现实代码

package com.gx.service.Impl;

import com.gx.service.RedisUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;

@Service
public class RedisUserServiceImpl implements RedisUserService {
    /**
     * 主要业务代码是通过某个key得到值:
     * Redis中 不存在:进数据库查询
     *         存在:进Redis中查询
     */
    @Autowired
    RedisTemplate<String,String> redisTemplate;

    @Override
    public String getString(String key) {
        ValueOperations<String,String> string=redisTemplate.opsForValue();//opsForValue是存储String数据的,opsForValue中提供了很多操作Redis的String类型的数据!!!

       // redisTemplate.opsForValue().set("cs1","cs数据1",1, TimeUnit.HOURS);  //设置存储数据并设置过期时间为1小时

        if (redisTemplate.hasKey(key)) {
            System.out.println("在Redis中取出并返回");
            return string.get(key);
        }else {
            String result="RedisTemplate的Value值";

            string.set(key,result);
            System.out.println("在数据库中取出并返回");
            return result;
        }
    }
}

4、RedisTemplateTest测试代码编写

package com.gx.test;

import com.gx.service.RedisUserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RedisTemplateTest {
    public static void main(String[] args) {
    //这里之所以只加载applicationContext.xml是因为我把spring-Redis.xml的配置直接放进了applicationContext.xml,不要问我为什么,因为我骚啊。
        ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        RedisUserService userService=ctx.getBean(RedisUserService.class);

        String key="cs2";
        String result=userService.getString(key); //这里是调用我们编写userService中的getString(key)方法
        System.out.println(result);
    }
}

运行前千万记得开启端口和防火墙等操作,不然连接不了会报错,这里提个醒!!!

运行第一遍
在这里插入图片描述
运行第二遍
在这里插入图片描述
当然,也可以去Redis中查询数据是否存入。

OK,到这里Spring整合Redis就初步整合完成了!

如果本文对你有一点点帮助,那么请点个赞呗,你的赞同是我最大的动力,谢谢~

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

在这里插入图片描述

posted @ 2019-12-25 08:22  宜春  阅读(6291)  评论(0编辑  收藏  举报