• redis--springboot使用redis


    写在前面:
    前置内容:redis--windows配置--redis基础
    本文介绍springboot使用redis操作

    springboot整合

    Spring Data Redis 集成了 Lettuce 和 Jedis,这是两个流行的 Redis 开源 Java 库。

    导入依赖

    springboot整合数据库类型都是在spring-data

    导入依赖
    redis依赖和连接池。

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
            <dependency>
                <groupId>org.apache.commonsgroupId>
                <artifactId>commons-pool2artifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    配置文件

    
      data:
        redis:
          database: 6
          host: localhost
          port: 6379
          password:
          timeout: 10s
          lettuce:
            pool:
              # 连接池最大连接数 默认8 ,负数表示没有限制
              max-active: 8
              # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
              max-wait: -1
              # 连接池中的最大空闲连接 默认8
              max-idle: 8
              # 连接池中的最小空闲连接 默认0
              min-idle: 0
            # 超时连接设置为不断连接
            shutdown-timeout: -1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    配置redis

    如果是用springboot默认配置的话那么就不用管这部分了。

    配置序列化

    // 配置bean
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
    
            redisTemplate.setKeySerializer(RedisSerializer.string());
            redisTemplate.setValueSerializer(RedisSerializer.json());
    
            redisTemplate.setHashKeySerializer(RedisSerializer.string());
            redisTemplate.setHashValueSerializer(RedisSerializer.json());
    
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    见名知意,set啥serializer就行了
    常见的序列化器

    序列化器说明
    StringRedisSerializerstring/byte[]自带的,速度快
    JdkSerializationRedisSerializerjdk自带
    OxmSerializerxml序列化器,占空间速度慢
    Jackson2JsonRedisSerializerjson序列化,需要定义javatype
    GenericJackson2JsonRedisSerializerjson序列化,不需要定义javatype

    我这样的RedisSerializer枚举了一些序列化器。

    为了方便使用我们可以提前讲一个operations注册成bean。

    这部分也可以先看操作在来回头看。
    
    • 1
        @Bean
        public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
            return redisTemplate.opsForValue();
        }
    
    • 1
    • 2
    • 3
    • 4

    然后就可以在使用的时候自动装配了

        @Autowired
        private ValueOperations<String,Object> b;
    
    • 1
    • 2

    使用

    操作类

    自动装配类提供了以下2个redis模板

    • RedisTemplate
    • StringRedisTemplate

    2者都是线程安全的,开合既用

    • 不同的是key-value类型的数据操作模板,StringRedisTemplate是继承了RedisTemplate只处理泛型为的泛型类型。RedisTemplate可以处理类型。
    • StringRedisTemplate 默认string的序列化,RedisTemplate默认是jdk序列化器。

    操作

    一般都是使用其,对应operations来处理对应的数据结构
    这里先介绍基础的操作

    
    Long countExistingKeys(Collection<K> keys) 计算存在的数量。keys
    Long convertAndSend(String channel, Object message) 将给定消息发布到给定通道。
    Long delete(Collection<K> keys) 删除给定的 .keys
    Boolean delete(K key) 删除给定的 .key
    Boolean expire(K key, long timeout, TimeUnit unit) 设置给定的生存时间。key
    Long getExpire(K key) 在几秒钟内获得生存时间。key
    Long getExpire(K key, TimeUnit timeUnit) 获取居住时间并将其转换为给定的时间单位。key
    Boolean hasKey(K key) 确定给定是否存在。key
    Set<K> keys(K pattern)查找与给定 匹配的所有键。 pattern
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ValueOperations

    Integer append(K key, String value) 将 追加到 。valuekey
    
    Long decrement(K key) 将存储为字符串值的整数值减 1。key
    Long decrement(K key, long delta) 递减 下存储为字符串值的整数值。keydelta
    Double increment(K key, double delta) 递增存储为字符串值的浮点数值。keydelta
    同样的还有long类型
    
    V get(Object key) 获取 的值。key
    V getAndDelete(K key) 返回值 at 并删除键。key
    V getAndExpire(K key, long timeout, TimeUnit unit) 在 返回值,并通过应用 使密钥过期。keytimeout
    V getAndExpire(K key, Duration timeout) 在 返回值,并通过应用 使密钥过期。keytimeout
    V getAndPersist(K key) 返回值 at 并保留密钥。key
    V getAndSet(K key, V value) 集合并返回其旧值。valuekey
    Boolean getBit(K key, long offset) 获取 处值为 的位值。offsetkey
    
    List<V> multiGet(Collection<K> keys) 获取多个 .keys
    void multiSet(Map<? extends K,? extends V> map) 使用 中提供的键值对将多个键设置为多个值。tuple
    Boolean multiSetIfAbsent(Map<? extends K,? extends V> map) 仅当提供的键时,才使用提供的键值对将多个键设置为多个值 不存在。tuple
    void set(K key, V value) 设置为 。valuekey
    void set(K key, V value, long offset) 用给定的 覆盖从指定开始的部分。keyoffsetvalue
    void set(K key, V value, long timeout, TimeUnit unit) 为 的 设置 和 过期时间。valuetimeoutkey
    default void set(K key, V value, Duration timeout) 为 的 设置 和 过期时间。valuetimeoutkey
    Boolean setBit(K key, long offset, boolean value) 将位设置为 in 值,存储在 。offsetkey
    Boolean setIfAbsent(K key, V value) 设置为在不存在时保存字符串。keyvaluekey
    Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit) 设置为保存字符串,如果不存在,则过期。keyvaluetimeoutkey
    default Boolean setIfAbsent(K key, V value, Duration timeout) 设置为保存字符串,如果不存在,则过期。keyvaluetimeoutkey
    Long
    size(K key)
    获取存储在 处的值的长度。key
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    其他

    其他的就不一一枚举了
    都是对应的类型+Operations

    HashOperations hash类型
    GeoOperations 地理位置类型
    ListOperations 链表
    ZSetOperations 有序集合
    SetOperations 无序集合

    封装工具类

    如果你不希望每次都需要

    redisTemplate.opsForValue();
    
    • 1

    进行操作就可以封装一个自己习惯的工具类如

    public interface RedisService {
    
        /**
         * 保存属性
         */
        void set(String key, Object value, long time);
    
        /**
         * 保存属性
         */
        void set(String key, Object value);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @Service
    public class RedisServiceImpl implements RedisService {
        @Autowired
        private RedisTemplate<String, Object> redisTemplate;
    
        @Override
        public void set(String key, Object value, long time) {
            redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Vue实现面经基础版案例(路由+组件缓存)
    win10中qt界面嵌套另一个qt界面
    Sequence
    个人和企业如何做跨境电商?用API电商接口教你选平台选品决胜跨境电商
    接口自动化测试实操
    深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序 计算机竞赛
    使用stream流合并多个List(根据实体类特定属性合并)
    c++中的重载
    python和PYtorch学习
    Java反射API详解与应用场景
  • 原文地址:https://blog.csdn.net/qq_56717234/article/details/132944904