Redis在项目中的使用(JedisPool方式)

 更新时间:2021年12月24日 11:22:17   作者:HongMaJu  
项目操作redis是使用的RedisTemplate方式,另外还可以完全使用JedisPool和Jedis来操作redis,本文给大家介绍Redis在项目中的使用,JedisPool方式,感兴趣的朋友跟随小编一起看看吧

springboot中redis相关配置

1、pom.xml中引入依赖

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

2、springboot的习惯优于配置。也在项目中使用了application.yml文件配置mysql的基本配置项。这里也在application.yml里面配置redis的配置项。

spring:
  datasource:
        # 驱动配置信息
        url: jdbc:mysql://localhost:3306/spring_boot?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver

        # 连接池的配置信息
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
  redis:
        host: 127.0.0.1
        port: 6379
        password: pass1234
        pool:
          max-active: 100
          max-idle: 10
          max-wait: 100000
        timeout: 0

springboot中redis相关类

  • 项目操作redis是使用的RedisTemplate方式,另外还可以完全使用JedisPool和Jedis来操作redis。整合的内容也是从网上收集整合而来,网上整合的方式和方法非常的多,有使用注解形式的,有使用Jackson2JsonRedisSerializer来序列化和反序列化key value的值等等,很多很多。这里使用的是我认为比较容易理解和掌握的,基于JedisPool配置,使用RedisTemplate来操作redis的方式。

redis单独放在一个包redis里,在包里先创建RedisConfig.java文件。

RedisConfig.java

@Configuration
@EnableAutoConfiguration
public class RedisConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.pool")
    public JedisPoolConfig getRedisConfig(){
        JedisPoolConfig config = new JedisPoolConfig();
        return config;
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public JedisConnectionFactory getConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setUsePool(true);
        JedisPoolConfig config = getRedisConfig();
        factory.setPoolConfig(config);
        return factory;
    }

    @Bean
    public RedisTemplate<?, ?> getRedisTemplate() {
        JedisConnectionFactory factory = getConnectionFactory();
        RedisTemplate<?, ?> template = new StringRedisTemplate(factory);
        return template;
    }

}
  • 在包里创建RedisService接口的实现类RedisServiceImpl,这个类实现了接口的所有方法。

RedisServiceImpl.java

@Service("redisService")
public class RedisServiceImpl implements RedisService {

    @Resource
    private RedisTemplate<String, ?> redisTemplate;

    @Override
    public boolean set(final String key, final String value) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.set(serializer.serialize(key), serializer.serialize(value));
                return true;
            }
        });
        return result;
    }

    @Override
    public String get(final String key) {
        String result = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] value = connection.get(serializer.serialize(key));
                return serializer.deserialize(value);
            }
        });
        return result;
    }

    @Override
    public boolean expire(final String key, long expire) {
        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
    }

    @Override
    public boolean remove(final String key) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.del(key.getBytes());
                return true;
            }
        });
        return result;
    }
}

在这里execute()方法具体的底层没有去研究,只知道这样能实现对于redis数据的操作。
redis保存的数据会在内存和硬盘上存储,所以需要做序列化;这个里面使用的StringRedisSerializer来做序列化,不过这个方式的泛型指定的是String,只能传String进来。所以项目中采用json字符串做redis的交互。

到此,redis在springboot中的整合已经完毕,下面就来测试使用一下。

5. springboot项目中使用redis

在这里就直接使用springboot项目中自带的单元测试类SpringbootApplicationTests进行测试。

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {

    private JSONObject json = new JSONObject();

    @Autowired
    private RedisService redisService;

    @Test
    public void contextLoads() throws Exception {
    }


    /**
     * 插入字符串
     */
    @Test
    public void setString() {
        redisService.set("redis_string_test", "springboot redis test");
    }

    /**
     * 获取字符串
     */
    @Test
    public void getString() {
        String result = redisService.get("redis_string_test");
        System.out.println(result);
    }

    /**
     * 插入对象
     */
    @Test
    public void setObject() {
        Person person = new Person("person", "male");
        redisService.set("redis_obj_test", json.toJSONString(person));
    }

    /**
     * 获取对象
     */
    @Test
    public void getObject() {
        String result = redisService.get("redis_obj_test");
        Person person = json.parseObject(result, Person.class);
        System.out.println(json.toJSONString(person));
    }

    /**
     * 插入对象List
     */
    @Test
    public void setList() {
        Person person1 = new Person("person1", "male");
        Person person2 = new Person("person2", "female");
        Person person3 = new Person("person3", "male");
        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);
        redisService.set("redis_list_test", json.toJSONString(list));
    }

    /**
     * 获取list
     */
    @Test
    public void getList() {
        String result = redisService.get("redis_list_test");
        List<String> list = json.parseArray(result, String.class);
        System.out.println(list);
    }

    @Test
    public void remove() {
        redisService.remove("redis_test");
    }

}

class Person {
    private String name;
    private String sex;

    public Person() {

    }

    public Person(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

在这里先是用@Autowired注解把redisService注入进来,然后由于是使用json字符串进行交互,所以引入fastjson的JSONObject类。然后为了方便,直接在这个测试类里面加了一个Person的内部类。

一共测试了:对于string类型的存取,对于object类型的存取,对于list类型的存取,其实本质都是转成了json字符串。还有就是根据key来执行remove操作。

获取字符串:

获取对象:

获取list:

redis管理客户端数据:

到此,测试完成,对于常用的一些数据类型的转换存取操作也基本调试通过。所以本文对于springboot整合redis到此结束。

到此这篇关于Redis在项目中的使用(JedisPool方式)的文章就介绍到这了,更多相关Redis项目中使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis常用命令集的使用

    Redis常用命令集的使用

    作为一名Redis开发者或管理员,熟练掌握Redis的常用命令是必不可少的,本文主要介绍了Redis常用命令集的使用,具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 关于Redis的内存淘汰策略详解

    关于Redis的内存淘汰策略详解

    当内存空间使用达到限制时,Redis 会根据配置策略来选择不同处理方式,要么返回 errors,要么按照不同的策略算法来清除一些旧数据,达到回收内存的目的,这就是 Redis 的内存淘汰,有些文章中,内存淘汰也叫缓存回收,需要的朋友可以参考下
    2023-05-05
  • Window下Redis的安装和部署详细图文教程

    Window下Redis的安装和部署详细图文教程

    Windows 版本的 Redis 是 Microsoft 的开源部门提供的 Redis. 这个版本的 Redis 适合开发人员学习使用,生产环境中使用 Linux 系统上的 Redis, 这里讲解了这两种的安装和下载,按照你们需要的liunx 或window步骤来 就可以了
    2024-05-05
  • redis中redis-cli使用小结

    redis中redis-cli使用小结

    redis-cli 是Redis命令行界面,一个简单的程序,允许直接从终端向Redis发送命令,并读取服务器发送的回复,本文主要介绍了redis中redis-cli使用小结,感兴趣的可以了解一下
    2023-10-10
  • 使用Redis缓存时高效的批量删除的几种方案

    使用Redis缓存时高效的批量删除的几种方案

    这篇文章主要介绍了使用Redis缓存时高效的批量删除的几种方案的相关资料,需要的朋友可以参考下
    2023-01-01
  • redis.config配置文件

    redis.config配置文件

    在使用Redis时,我们通常需要对Redis进行一些配置,以确保其能够正常运行并满足我们的需求,本文主要介绍了redis.config配置文件,感兴趣的可以了解一下
    2023-11-11
  • 详解Redis中的List是如何实现的

    详解Redis中的List是如何实现的

    List 的 Redis 中的 5 种主要数据结构之一,它是一种序列集合,可以存储一个有序的字符串列表,顺序是插入的顺序,本文将给大家介绍了一下Redis中的List是如何实现的,需要的朋友可以参考下
    2024-05-05
  • 在K8s上部署Redis集群的方法步骤

    在K8s上部署Redis集群的方法步骤

    这篇文章主要介绍了在K8s上部署Redis集群的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Redis服务器优化方式

    Redis服务器优化方式

    文章分享了常见的Redis服务器优化技巧和策略,主要包括内存管理、持久化配置、连接配置和网络优化四个方面,内存管理主要是设置maxmemory参数和选择合适的内存淘汰策略,持久化配置包括RDB持久化和AOF持久化
    2024-09-09
  • redis的2种持久化方案深入讲解

    redis的2种持久化方案深入讲解

    这篇文章主要给大家介绍了关于redis的2种持久化方案的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论