springboot整合redis

springboot在整合redis时会涉及两个模板类,其中StringRedisTemplateRedisTemplate的子类RedisTemplateStringRedisTemplate的父类,它可以存储任意数据类型,但是任意类型必须序列化,默认采用的是jdk的序列化方式。

1.添加依赖

<!--redis相关的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.添加配置文件

##redis配置
#spring.redis.host=192.168.163.128
#spring.redis.port=6379
##获取数
#spring.redis.lettuce.pool.max-active=8
#spring.redis.lettuce.pool.max-idle=8
#spring.redis.lettuce.pool.max-wait=1ms
#spring.redis.lettuce.pool.min-idle=0

3.简单测试类

使用StringRedisTemplate

@SpringBootTest
class MarieJedis2ApplicationTests {
    //因为springboot整合redis时会把StringRedisTemplate创建并交与Spring容器管理
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        ValueOperations operations = redisTemplate.opsForValue();
        //查看redis中所有的key
        System.out.println(redisTemplate.keys("*"));
        //删除指定key的内容
//        System.out.println(redisTemplate.delete("k1"));
        //获取当前key的剩余时间
        System.out.println(redisTemplate.getExpire("user"));
        //判断key是否存在 返回0表示不存在,反之就是存在
        System.out.println(redisTemplate.hasKey("k1"));

        //String相关
        //设置指定key的值
//        operations.set("k4","1");
        //获取指定key的值
        Object k2 = operations.get("k2");
        System.out.println(k2);
        //同时设置一个或多个kv对
        /*HashMap<Object, Object> map = new HashMap<>();
        map.put("k01","01");
        map.put("k02","02");
        map.put("k03","03");
        operations.multiSet(map);*/
        //递增
        /*operations.increment("k3");
        Object k3 = operations.get("k3");
        System.out.println(k3);*/
        //递减
        /*operations.decrement("k3");
        Object k3 = operations.get("k3");
        System.out.println(k3);*/
        //只有在key不存在时设置key的值
        /*Boolean aBoolean = operations.setIfAbsent("k1", "v1111");
        System.out.println(aBoolean);*/

        //Hash类型
        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
        //将哈希表key中的字段field的值设为value
        /*hash.put("hk1","name","xyz");
        hash.put("hk1","age","18");
        hash.put("hk1","sex","男");*/
        //获取存储在哈希表中指定字段的值
        System.out.println(hash.get("hk1", "name"));
        //获取在哈希表中指定的key的所有字段和值
        System.out.println(hash.entries("hk1"));
        //获取所有哈希表中的字段
        System.out.println(hash.keys("hk1"));
        //获取哈希表中所有值
        System.out.println(hash.values("hk1"));


        //List相关
        ListOperations<String, String> list = redisTemplate.opsForList();
        //将一个或多个值插入到列表头部  可以重复值
        /*Long aLong = list.leftPushAll("lk1", "xyz", "xqc", "zzz", "xxx", "ccc");
        System.out.println(aLong);*/
        //获取列表指定范围内的元素
        System.out.println(list.range("lk1", 0, -1));
        //从列表左侧移除第一个元素
        //System.out.println(list.leftPop("lk1"));


        //set相关 无须且不可重复的
        SetOperations<String, String> forSet = redisTemplate.opsForSet();
        //向集合添加一个或多个成员
        /*Long add = forSet.add("sk1", "xyz", "xxx", "yyy", "zzz", "qqq");
        System.out.println(add);*/
        /*Long add = forSet.add("sk2", "xyz", "xxx", "fff", "hhh", "jjj");
        System.out.println(add);*/
        //返回集合中的所有成员
        System.out.println(forSet.members("sk1"));
        //随机获取一个或多个元素
        System.out.println(forSet.randomMember("sk1"));
        //返回指定所有集合的交集
        System.out.println(forSet.intersect("sk1", "sk2"));

        //sort set有序集合
        //向有序集合添加一个或多个成员,或者个更新已存在成员的分数
        /*ZSetOperations zSet = redisTemplate.opsForZSet();
        zSet.add("zk1","数学",88.00d);
        zSet.add("zk1","语文",88.50d);
        zSet.add("zk1","英语",55.00d);
        zSet.add("zk1","历史",99.00d);*/
        //通过索引区间返回有序集合指定区间内的成员
//        System.out.println(zSet.range("zk1", 0, -1));
    }

}

4.测试(使用RedisTemplate,默认采用的是jdk的序列化方式 ,统一设置redisTemplate的序列化 )

4.1设置序列化Redisconfig

@Configuration
public class RedisConfig {
    //比如验证码
    @Bean //该方法的返回对象交于spring容器管理
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer 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);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        //field hash序列化 key field value
        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        return template;
    }
}

4.2测试代码

@SpringBootTest
class SpringRedisApplicationTests3 {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("user2",new user(2,"zmf2",25));


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值