ss-redis自定义RedisTemplate和封装成工具类 (SpringBoot集成Redis,springboot)

320 阅读1分钟

redis自定义RedisTemplate和封装成工具类

pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

config类

//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/config/RedisConfig.java:13:1

@Configuration
public class RedisConfig {

    //编写我们自己的 redis Template

    //这是我给大家写好的一个固定模板,大家在企业中,拿去就可以直接使用!
    //自己定义了一个RedisTemplate
    //<bean id=redisTemplate class=RedisTemplate>
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        //我们为了自己开发方便,一般直接使用<string,object>
        RedisTemplate<String, Object> template = new RedisTemplate<String,Object>();
        template.setConnectionFactory(factory);

        //Json序列化配理
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        //string的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        //key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);

        //hash 的key出采用string的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);

        //value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);

        //hashyvalue序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);

        template.afterPropertiesSet();

        return  template;
    }
}

工具类

//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/utils/RedisUtil.java:6:1
@Component
public class RedisUtil {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;


    /**
     * 普通缓存获取
     * @param key
     * @return
     */
    public Object get(String key){
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }

    /**
     * 普通缓存放入
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key,Object value){
        try {
            redisTemplate.opsForValue().set(key,value);
            return  true;
        } catch (Exception e) {
            e.printStackTrace();
            return  false;
        }
    }

}

application.properties

jetbrains://idea/navigate/reference?project=sprintboot&path=application.properties:1:1


spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.lettuce.pool.max-active=8

测试控制器


//jetbrains://idea/navigate/reference?project=sprintboot&path=com/cmk/spingboot09redis/Spingboot09RedisApplicationTests.java:14:1
@SpringBootTest
class Spingboot09RedisApplicationTests {

    @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate redisTemplate;

    @Autowired
    private RedisUtil redisUtil;

    @Test
    void contextLoads() {
        //redisTemplate 操作不同的数据类型,api和我们的指令是一样的
        //opsForValue 操作字符类似string
        //opsForList 操list 类似List
        //opsForSet
        //opsForHash
        //opsForZSet
        //opsForGeo
        //opsForHyperLogLog
        //除了进本的操作,我们常用的方法都可以直接通过redis Template操作,比如事务,和基本的CRUD

        //获取redis的连接对象
/*        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
        connection.flushDb();
        connection.flushAll();*/

        redisTemplate.opsForValue().set("mykey","test");
        System.out.println(redisTemplate.opsForValue().get("mykey"));

    }

    @Test
    public void test() throws JsonProcessingException {
        //真实的开发一般使用用son来传递对象
        User user = new User("cc", 12);
/*        String jsonUser = new ObjectMapper().writeValueAsString(user);
        redisTemplate.opsForValue().set("user2",jsonUser);*/
        redisTemplate.opsForValue().set("user3",user);
        System.out.println(redisTemplate.opsForValue().get("user3"));
    }

    @Test
    public void test2(){
        redisTemplate.opsForValue().set("mykey2","xxxyyy");
        System.out.println(redisTemplate.opsForValue().get("mykey2"));
    }

    //使用自己封装工具操作
    @Test
    public void test3(){
        redisUtil.set("age","8888");
        System.out.println(redisUtil.get("age"));
    }

}