springboot集成redis

springboot集成redis,第1张

springboot集成redis

一 前言
一篇关于springboot集成redis的小知识,如果有学过redis基础篇的读者很容易看懂。

二 集成配置
2.1 依赖
springboot 2.1.1 版本


        
            org.springframework.boot
            spring-boot-starter-data-redis
        

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

        
            org.springframework.boot
            spring-boot-starter-web
        
    
复制代码

2.2 配置类
使用 自定义的配置 替换 JdkSerializationRedisSerializer, 否则序列化进 redis 会显示为特殊字符;

查阅 RedisReactiveAutoConfiguration 类可以查看 reactiveRedisTemplate 装配过程‘;

查阅 RedisAutoConfiguration 类可以查看 redisTemplate 装配过程‘;

/**
 * @Author lsc
 * 

redis配置 替换默认的jdk序列化机制

*/ @Configuration public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { // 创建redisTemplate RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // 使用Jackson2JsonRedisSerialize替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // key采用String的序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); // value序列化方式采用jackson redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash的key也采用String的序列化方式 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // hash的value序列化方式采用jackson redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } } 复制代码

2.3 application.yml
redis 的 连接属性配置和连接池配置;

server:
  port: 9000

spring:
  redis:
    # Redis服务器地址
    host: localhost
    #Redis服务器连接端口
    port: 6379
    #password:
    # Redis数据库索引(默认为0)
    database: 1
    # 连接超时时间(毫秒)
    timeout: 5000
    jedis:
      pool:
        #连接池最大连接数(使用负值表示没有限制)
        max-active: 100
        # 连接池中的最小空闲连接
        max-idle: 10
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 100000
复制代码

三 数据类型测试
3.1 String *** 作

    @Autowired
    RedisTemplate redisTemplate;

    // string 入库
    @Test
    public void testForValue1(){
        String key = "zszxz";
        String value = "知识追寻者";
        redisTemplate.opsForValue().set(key, value);
    }
    
    // string 出库
    @Test
    public void testForValue2(){
        String key = "zszxz";
        Object value = redisTemplate.opsForValue().get(key);
        // 知识追寻者
        System.out.println(value);
    }

    // string key过期时间入库
    @Test
    public void testForValue3(){
        String key = "today";
        String value = "周六";
        long time = 60;
        redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
    }
复制代码

3.2 key *** 作

@Autowired
    RedisTemplate redisTemplate;

    // 测试 key 是否存在
    @Test
    public void test1(){
        String key = "zszxz";
        Boolean exist = redisTemplate.hasKey(key);
        // true
        System.out.println(exist);
    }
    // 设置 key 过期时间
    @Test
    public void test2(){
        String key = "zszxz";
        long time = 60;
        redisTemplate.expire(key, time, TimeUnit.SECONDS);
    }

    // 获取key过期时间
    @Test
    public void test3(){
        String key = "zszxz";
        Long expire = redisTemplate.getExpire(key, TimeUnit.SECONDS);
        // 7
        System.out.println(expire);
    }

    // 删除key
    @Test
    public void test4(){
        String key = "zszxz";
        redisTemplate.delete(key);
    }
复制代码

3.3 散列 *** 作

@Autowired
    RedisTemplate redisTemplate;

    // 放入一个 hash ( key value )
    @Test
    public void test1(){
        String key = "zszxz";
        String item = "name";
        String value = "知识追寻者";
        redisTemplate.opsForHash().put(key, item, value);
    }

    // 向hash中存放一个map
    @Test
    public void test2(){
        String key = "feature";
        Map map = new HashMap<>();
        map.put("name", "知识追寻者");
        map.put("age", "18");
        redisTemplate.opsForHash().putAll(key, map);
    }

    // 获取一个hash 的 所有key-value
    @Test
    public void test3(){
        String key = "feature";
        Map entries = redisTemplate.opsForHash().entries(key);
        // {name=知识追寻者, age=18}
        System.out.println(entries);
    }

    // 获取一个hash 的 指定key 的value
    @Test
    public void test4(){
        String key = "feature";
        String item = "name";
        Object value = redisTemplate.opsForHash().get(key, item);
        // 知识追寻者
        System.out.println(value);
    }

    // 删除指定 hash key 的value
    @Test
    public void test5(){
        String key = "zszxz";
        String item = "name";
        redisTemplate.opsForHash().delete(key, item);
    }

    // 是否存在 指定 hash 的key
    @Test
    public void test6(){
        String key = "zszxz";
        String item = "name";
        Boolean exist = redisTemplate.opsForHash().hasKey(key, item);
        // false
        System.out.println(exist);
    }
复制代码

3.4 列表 *** 作

@Autowired
    RedisTemplate redisTemplate;

    @Test
    public void test(){

    }

    // 列表右推入
    @Test
    public void test1(){
        String key = "zszxz";
        String value = "知识追寻者";
        redisTemplate.opsForList().rightPush(key, value);
    }

    // 列表左推入
    @Test
    public void test2(){
        String key = "zszxz";
        String value = "晴雨天";
        redisTemplate.opsForList().leftPush(key, value);
    }
    // 列表左d出
    @Test
    public void test3(){
        String key = "zszxz";
        Object value = redisTemplate.opsForList().leftPop(key);
        // 晴雨天
        System.out.println(value);

    }
    // 列表右d出
    @Test
    public void test4(){
        String key = "zszxz";
        Object value = redisTemplate.opsForList().rightPop(key);
        // 知识追寻者
        System.out.println(value);
    }

    // 将list右推入列表
    @Test
    public void test5(){
        ArrayList list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        String key = "number";
        redisTemplate.opsForList().rightPushAll(key, list);
    }

    // 修改列表指定索引的值
    @Test
    public void test7(){
        String key = "number";
        int index = 0;
        int value = 666;
        redisTemplate.opsForList().set(key, index, value);
    }

    // 获取列表指定索引的值
    @Test
    public void test8(){
        String key = "number";
        int index = 0;
        Object value = redisTemplate.opsForList().index(key, index);
        // 666
        System.out.println(value);
    }
复制代码
 

3.5 set *** 作

  @Autowired
    RedisTemplate redisTemplate;

    // set 中存储值
    @Test
    public void test1(){
        String key = "zszxz";
        String value1 = "晴雨天";
        String value2 = "公众号:知识追寻者";
        redisTemplate.opsForSet().add(key, value1, value2);
    }

    // 从 set 中取值
    @Test
    public void test2(){
        String key = "zszxz";
        Set members = redisTemplate.opsForSet().members(key);
        // [晴雨天, 公众号:知识追寻者]
        System.out.println(members);
    }

    // 判定 set 中是否存在 key-value
    @Test
    public void test3(){
        String key = "zszxz";
        String value = "晴雨天";
        Boolean member = redisTemplate.opsForSet().isMember(key, value);
        // true
        System.out.println(member);
    }
复制代码
 

总结
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4670746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)