SpringDataRedis

SpringDataRedis:提供了RedisTemplate工具类,封装了各种Redis的操作

API返回值操作类型
redisTemplate.opsForValue()ValueString
redisTemplate.opsForHash()HashHash
redisTemplate.opsForList()ListList
redisTemplate.opsForSet()SetSet
redisTemplate.opsForZSet()ZSetSortedSet

  1. 创建SpringBoot工程引入Redis依赖和连接池依赖

    <!--Redis依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    <!--common-pool的依赖-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
  2. 在yml文件中配置连接信息

    spring:
      redis:
        host: 192.168.163.101
        port: 6379
        password: 123321
        lettuce:
          pool:
            max-active: 8
            max-idle: 8
            min-idle: 0
            max-wait: 100
  3. 使用@AutoWired注入RedisTemplate redisTemplate

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
  4. 即可使用redisTemplate来操作redis

    redisTemplate.opsForValue().set("name","腕豪");
    String name = redisTemplate.opsForValue().get("name");

RedisTemplate序列化

RedisSerializer序列化配置

@Configuration
public class Config {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        // 设置连接工厂
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置 Key 的序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // 设置 Value 的序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashKeySerializer(jsonRedisSerializer);
        return redisTemplate;
    }
}

注意:为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销


StringRedisTemplate

        为节省内存空间,不推荐使用JSON序列化器来处理value,推荐使用String序列化器,要求只能存储String类型的key和value。需要存储java对象时,手动的去完成对象的序列化和反序列化

@Resource
    private StringRedisTemplate stringRedisTemplate;
    private static final ObjectMapper mapper =  new ObjectMapper();
    @Test
    void contextLoads() {
        stringRedisTemplate.opsForValue().set("name","腕豪");
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
    @Test
    void setUser() throws JsonProcessingException {
        // 创建对象
        User user = new User("剑豪", 10);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:3",json);
        // 获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:3");
        // 反序列化为User对象
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println(user1);
    }

写入java对象时,手动吧对象序列化为json

读取redis时,手动把读取到的json反序列化为java对象

    // 操作Hash
    @Test
    void hashTest() {
        stringRedisTemplate.opsForHash().put("user:3","name","亚索");
        stringRedisTemplate.opsForHash().put("user:3","age","18");
        Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:3");
        System.out.println(entries);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值