资讯专栏INFORMATION COLUMN

Spring-Data-Redis 解析

princekin / 676人阅读

摘要:概述是大家庭中的一员,和生态结合的很好,它提供了低级别和高级别的抽象,使我们很方便的就可以和交互后的版本需要支持同时支持和这个没怎么用过以后默认实现是使用的话需要手动改下引入的包使用引入包配置文件数据库索引默认为服务器地

概述

Spring Data Redis 是 Spring Data大家庭中的一员,和Spring 生态结合的很好,它提供了低级别(RedisTemplate ...)和高级别(ListOperations )的抽象,使我们很方便的就可以和Redis交互

2.X后的版本需要Java 8 支持

同时支持 Jedis和Lettuce(这个没怎么用过),2.X以后默认实现是Lettuce,使用Jedis的话需要手动改下(引入Jedis的包)

使用: 引入包:

        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.data
            spring-data-redis
        

        
            redis.clients
            jedis
            2.9.0
        
    `
配置文件
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=5
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=*****
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
Config
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate=new RedisTemplate();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        System.out.println("suscessful");
        return redisTemplate;
    }
}
测试类:
 @Autowired
    private RedisTemplate redisTemplate;

    @Resource(name="redisTemplate")
    private HashOperations hashOperations;

    @Resource(name="redisTemplate")
    private ZSetOperations zSetOperations;
    @Test
    public void test1(){
        redisTemplate.opsForValue().set("my","my");
        Assert.assertEquals("my",redisTemplate.opsForValue().get("my"));
    }
    @Test
    public void test2() {
        Map map = new HashMap<>();
        map.put("age", "13");
        map.put("name", "selrain");
        hashOperations.putAll("test2", map);

        Assert.assertEquals("13",hashOperations.get("test2","age"));

        hashOperations.delete("test2","age","name");
    }
    @Test
    public void test3(){
       zSetOperations.add("selrain","selraion",1);
       Assert.assertEquals("selraion",zSetOperations.range("selrain",0,1).iterator().next());
       zSetOperations.remove("selrain","selraion");
    }
    @Test
    public void test4(){
        redisTemplate.execute((RedisConnection connection)->{
            Jedis jedis=(Jedis)connection.getNativeConnection();
            String s=jedis.set("test4","selrain","NX","EX",6000);
            return s;
        });
    }
序列化:

数据会转换成字节在Redis存储,在Spring Data中,序列化的核心包是org.springframework.data.redis.serializer,想要自定义自己的序列化,实现RedisSerializer即可,默认有2种实现

JdkSerializationRedisSerializer:RedisTemplate默认使用这个

StringRedisSerializer:针对String类型的序列化实现,大部分的情况下使用这个就好了

Api: RedisTemplate:

opsForValue、opsForHash、opsForZSet方法分别获取对String、hash、Zset数据结构的操作实现,一般感觉用这个就好了

HashOperations、ZSetOperations等

还可以直接注入这些抽象,这样就不用opsForHash,可以直接用,为什么不同的类型可以直接注入?看下这篇文章:
http://www.cnblogs.com/chaned...

execute():

execute方法给我们暴露了RedisConnection,拿到链接后,我们可以转换成Jedis的原始链接,从而可以使用data redis不支持但是jedis支持的命令:比如测试代码test4

其他:

想不想了解Redis的配置是如何初始化的?看这篇文章:
https://my.oschina.net/u/3866...

最后

小尾巴走一波,欢迎关注我的公众号,不定期分享编程、投资、生活方面的感悟:)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77314.html

相关文章

  • 集成 Spring data redis 笔记

    摘要:本文有部分代码是抄袭的。第二个坑需要指定对象的数据类型,不然反序列化报错。第三的编辑器非常不好用。上面的配置有个缺陷,就是只能指定数据类型去缓存到。其实还可以配置一个但我持久层是。查询分页结果时,会无法反序列化。搜了半天没解决方案。 本文有部分代码是抄袭的。 1 :引入依赖 org.springframework.data spring-data-redis ${spr...

    张迁 评论0 收藏0

发表评论

0条评论

princekin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<