基于各种整合案例详解Java如何操作Redis?

数据库 潘老师 4年前 (2020-08-24) 1602 ℃ (0) 扫码查看

Redis的应用非常广泛,用法也是多种多样,对于Java开发者而言,经常会使用到redis到项目中,可能是普通的java项目、Maven项目或者pring整合redis,SpringBoot整合redis等,下面潘老师带大家一起来看一下各种整合使用场景!

1、我这里使用的Redis是安装在Windows系统中的5.0.9版本,和Linux版本操作起来方法一样(Linux系统注意要关闭防火墙)。如果你还没有安装,可以参考:Redis单机版安装步骤图文教程(Linux和Windows)
2、非Maven项目请先准备jar包(自行网上下载,建议去阿里云Maven仓库mvnrepository仓库查找下载:
1)jedis-2.9.0.jar,类似于mysql驱动包
2)commons-pool2-2.8.1.jar,类似于数据库连接池包

1)不整合连接池
新建普通Java项目,将jedis-2.9.0.jar导入到buildpath中,然后操作代码如下:

import org.junit.Test;
import redis.clients.jedis.Jedis;

public class TestRedis {
    @Test
    public void test1() {
        // 1. 创建Jedis 对象-设置IP地址和端口
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // 2. 保存数据
        jedis.set("myblog", "panziye.com");
        // 3. 根据key获取数据
        String value = jedis.get("myblog");
        System.out.println(value);
        // 4.释放资源
        jedis.close();
    }
}

运行结果:
基于各种整合案例详解Java如何操作Redis?
2)整合连接池
和数据库连接池整合很类似,再将commons-pool2-2.8.1.jar添加至buildpath中,使用代码如下:

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class TestRedis {
    @Test
    public void test2() {
        // 获取连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(30);
        // 设置最大的空闲连接数
        config.setMaxIdle(10);

        // 获得连接池: JedisPool jedisPool = new JedisPool(poolConfig,host,port);
        JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);

        // 获得核心对象:jedis
        Jedis jedis = null;
        try{
            // 通过连接池来获得连接
            jedis = jedisPool.getResource();
            // 设置数据
            jedis.set("myname","panziye");
            // 获取数据
            String myname = jedis.get("myname");
            System.out.println(myname);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            // 释放资源
            if(jedis != null){
                jedis.close();
            }
            // 释放连接池
            if(jedisPool != null){
                jedisPool.close();
            }
        }

    }
}

运行结果:
基于各种整合案例详解Java如何操作Redis?

普通的Maven项目使用代码案例和上面一样,不过就是jar包可以通过在pom.xml中引入坐标即可,以下是这两个包的中央仓库坐标:
jedis-2.9.0.jar的坐标:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

commons-pool2-2.8.1.jar的坐标:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.8.1</version>
</dependency>

在这里我们基于之前的搭建好的SSM项目进行整合,之前的SSM项目参考:Eclipse搭建SSM框架开发环境的流程(Spring+SpringMVC+Mybatis)
1、下载相关jar包,并导入到lib目录
jedis-2.9.0.jarcommons-pool2-2.8.1.jarspring-data-redis-1.7.2.RELEASE.jar
如果用Maven,则spring-data-redis-1.7.2.RELEASE.jar的中央仓库坐标为:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
</dependency>
注意:jar包版本要匹配,如果spring-data-redis 版本过高,可能会出现jedis : NoSuchMethodError: org.springframework.util.Assert.isTrue(ZLjava/util/function/Supplier异常,因为spring-data-redis 2.0以上需要jdk8和spring5以上才能支持。

2、在src目录下新建redis.properties配置文件,具体配置如下:

redis.host=127.0.0.1
redis.port=6379
redis.maxIdle=300
redis.maxWaitMillis=1000
redis.timeout=100000
redis.maxTotal=600
redis.testOnBorrow=true
redis.testOnReturn=true

3、在spring核心配置文件spring.xml中新增如下配置:
1)引入redis.properties文件,由于我之前引入过jdbc.properties,只需在后面加一下即可。

<context:property-placeholder location="classpath:jdbc.properties,classpath:redis.properties"/>

2)整合redis配置:

<!--设置连接池-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxTotal" value="${redis.maxTotal}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        <property name="testOnReturn" value="${redis.testOnReturn}" />
    </bean>
    <!--设置链接属性-->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <!-- 此处我的redis密码为空 -->
        <property name="password" value="" /> 
        <property name="timeout" value="${redis.timeout}"></property>
        <property name="poolConfig" ref="poolConfig" />
    
    </bean>
    <!-- Jedis模板配置  -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

4、新建RedisController.java测试代码如下:

@Controller
public class RedisController {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    
    @RequestMapping("set")
        public String setTest(){
        //设置
        redisTemplate.opsForValue().set("username", "潘子夜");
        //获取
        System.out.println(redisTemplate.opsForValue().get("username"));
        return "success";
    }
}

5、运行浏览器访问,发现能成功设置与获取,在此不做展示。

在这里我们基于之前搭建的案例操作:IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境
1、pom.xml新增redis依赖:

 <!-- 支持redis -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、application.properties新增redis相关配置:

#配置redis
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=1000

3、新建测试代码,运行结果如图:

@Controller
public class RedisController {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @RequestMapping("/redis")
    public String redis(){
        redisTemplate.opsForValue().set("password","www.panziye.com");
        System.out.println(redisTemplate.opsForValue().get("password"));
        return "success";
    }
}

基于各种整合案例详解Java如何操作Redis?

以上就是各种整合redis的情况,如果有疑问或者建议,请留言评论!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/database/827.html
喜欢 (3)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】