redis基本操作 & redis序列化 & @Cache

配置

redis详细配置

特点

redis部分简介(具体给出了各种数据类型的实现方式等)

  1. 数据持久化
  2. String, list, set, hash, zset(ordered sets)数据类型丰富
  3. 数据备份,支持master-slave模式的数据备份
  4. 原子操作,支持事务(也是原子操作)
  5. 性能高 11w/s读, 8w1/s写
  6. 在磁盘格式方面是紧凑的以追加的方式产生的,并不需要进行随机访问

访问

> redis-cli   // 直接就能访问数据库0
> redis-cli --raw // 可以在cli工具中查看中文 而不是看到 /6x/8d 之类的编码 

SpringBoot中使用redis

  1. 在Config类中配置redis:
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //设置key的序列化和反序列化类型 采用StringRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //设置value的序列化和反序列化类型 采用GenericJackson2JsonRedisSerializer
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }

    @Bean
    @ConditionalOnMissingBean(name = "stringRedisTemplate")
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        return stringRedisTemplate;
    }
}
  1. 如果要使用redisTemplate<String, Object> (Object可以替换成自定义的类,例如User,但是需要序列化的实体类)
public class User implements Serializable {
    private String name;
    private String password;
    private String email;
    private String address;
    
    // setter and getter
}
  1. 使用的时候直接用
@RestController
public class redisController {

    @Autowired
    RedisTemplate<String, Object> redisTemplate;

    @RequestMapping(value = "/set", method = RequestMethod.GET)
    public void setRedisHash(@RequestParam(name = "key") String key, @RequestParam(name = "value") String value) {
        User user = new User();
        user.setName(value);
        redisTemplate.opsForValue().set(value, user);
    }

    @RequestMapping(value = "/setString", method = RequestMethod.GET)
    public void setRedisString(@RequestParam(name = "key") String key, @RequestParam(name = "value") String value) {
        redisTemplate.opsForValue().set(key, value); // 如果key值重复了,那么将用现在的value覆盖掉以前的内容
    }

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public Object getRedisHash(@RequestParam(name = "value") String value) {
        return redisTemplate.opsForValue().get(value);
    }

    @GetMapping(value = "/test")
    public Object testRedisHash(@RequestParam(name = "value") String value) {
        Object object = redisTemplate.opsForValue().get(value);
        if (object == null) {
            System.out.println("value not exists");
            return "value";
        }
        return redisTemplate.opsForValue().get(value);
    }
}
  1. redis 命令行中部分操作
// 进入redis命令行
> redis-cli -h 127.0.0.1 -p 6379
// 切换db
> select 1
// 查看所有key
> keys *
// 清除当前db所有键
> flushdb
> flushall // 清除所有

具体操作在这个链接:Redis的基本操作 可以说是非常的具体了

springboot整合spring @Cache和Redis

这是一个使用redis缓存的文章,内容中不涉及缓存时间,但是基本给出了redis @cache的使用方法,以下给出了缓存配置文件,可以根据配置给出缓存配置文件来改变缓存配置:

@Configuration
public class CacheConfig extends CachingConfigurerSupport {

    @Resource
    private RedisConnectionFactory factory;

    /**
     * 自定义生成redis-key
     *
     * @return
     */
    @Override
    @Bean
    public KeyGenerator keyGenerator() {
        return (o, method, objects) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(o.getClass().getName()).append(".");
            sb.append(method.getName()).append(".");
            for (Object obj : objects) {
                sb.append(obj.toString());
            }
            System.out.println("keyGenerator=" + sb.toString());
            return sb.toString();
        };
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new SimpleCacheResolver(cacheManager());
    }

    @Bean
    @Override
    public CacheErrorHandler errorHandler() {
        // 用于捕获从Cache中进行CRUD时的异常的回调处理器。
        return new SimpleCacheErrorHandler();
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        RedisCacheConfiguration cacheConfiguration =
                defaultCacheConfig()
                        .entryTtl(Duration.ofSeconds(60 * 2)) // 设置ttl 2min 根据duration来设置
                        .disableCachingNullValues()
                        .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();

    }
}
posted @ 2020-10-15 23:14  wunai006  阅读(303)  评论(0)    收藏  举报