redis--springboot使用redis

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

文章目录

  • springboot整合
    • 导入依赖
    • 配置文件
    • 配置redis
  • 使用
    • 操作类
    • 操作
    • ValueOperations
    • 其他
  • 封装工具类

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>

配置文件


  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

配置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;
    }

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

序列化器 说明
StringRedisSerializer string/byte[]自带的,速度快
JdkSerializationRedisSerializer jdk自带
OxmSerializer xml序列化器,占空间速度慢
Jackson2JsonRedisSerializer json序列化,需要定义javatype
GenericJackson2JsonRedisSerializer json序列化,不需要定义javatype

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

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

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

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

    @Autowired
    private ValueOperations<String,Object> b;

使用

操作类

自动装配类提供了以下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

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

其他

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

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

封装工具类

如果你不希望每次都需要

redisTemplate.opsForValue();

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

public interface RedisService {

    /**
     * 保存属性
     */
    void set(String key, Object value, long time);

    /**
     * 保存属性
     */
    void set(String key, Object value);
    }
@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);
    }
}

你可能感兴趣的:(redis,springboot,redis,spring,boot,数据库)