ホームページ  >  記事  >  データベース  >  SpringBoot 統合 Redis のアノテーションは何ですか?

SpringBoot 統合 Redis のアノテーションは何ですか?

PHPz
PHPz転載
2023-05-31 23:43:222343ブラウズ

    redis の概要:

    Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统
    (区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不
    足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到
    内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的
    应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修
    改操作写入追加的记录文件,实现数据的持久化。
    Redis的特点:
    1,Redis读取的速度是110000次/s,写的速度是81000次/s;
    2,原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
    3,支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)
    4,持久化,集群部署
    5,支持过期时间,支持事务,消息订阅

    依存関係の紹介:

    <!-- redis -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- spring2.X集成redis所需common-pool2-->
    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.0</version>
    </dependency>

    application.properties ファイルの書き込み

    #redi配置
    spring.redis.host=ip地址
    spring.redis.port=端口号
    spring.redis.database=0
    spring.redis.password=密码
    spring.redis.lettuce.pool.max-active=20
    spring.redis.lettuce.pool.max-wait=1
    #最大阻塞等待时间(负数表示没有限制)
    spring.redis.lettuce.pool.max-idle=5
    spring.redis.lettuce.pool.min-idle=0
    # 关闭超时时间
    spring.redis.lettuce.shutdown-timeout=100

    構成の書き込みclass :

    @EnableCaching
    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    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);
    return template;
     }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
    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);
    // 配置序列化(解决乱码的问题),过期时间600秒
    RedisCacheConfiguration config =
    RedisCacheConfiguration.defaultCacheConfig()
     .entryTtl(Duration.ofSeconds(600))
     
    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redi
    sSerializer))
     
    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(ja
    ckson2JsonRedisSerializer))
     .disableCachingNullValues();
    RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
     .cacheDefaults(config)
     .build();
    return cacheManager;
     }
    }

    Springbootのredisアノテーション紹介

    (1) キャッシュ @Cacheable

    メソッドに従って返された結果をキャッシュします。キャッシュが存在する場合は、キャッシュ データを直接読み取ってリターンし、キャッシュが存在しない場合はメソッドを実行し、返された結果をキャッシュに格納します。通常、クエリ メソッドで使用されます。

    ソース コードを表示します。属性値は次のとおりです。

    SpringBoot 統合 Redis のアノテーションは何ですか?

    (2) キャッシュ @CachePut

    にはこのアノテーションが付いています。メソッドは実行されるたびに呼び出され、結果は指定されたキャッシュに保存されます。データベースに再度クエリを実行する代わりに、応答のキャッシュからデータを直接読み取ることも別のアプローチです。通常、新しいメソッドを追加するために使用されます。

    #ソースコードを表示、属性値は以下のとおりです

    SpringBoot 統合 Redis のアノテーションは何ですか?

    (3) キャッシュ @CacheEvict

    このアノテーション フラグを使用すると、指定されたキャッシュがクリアされます。通常、update メソッドまたは delete メソッドでソース コードを表示するために使用されます。属性値は次のとおりです。

    SpringBoot 統合 Redis のアノテーションは何ですか?

    SpringBoot 統合 Redis のアノテーションは何ですか?

    不能连接redis:
    (1)关闭liunx防火墙
    (2)找到redis配置文件:
    修改 protected-mode yes  改为  protected-mode no
    注释掉: bind 127.0.0.1

    Test

    @Cacheable(value = "banner", key = "&#39;selectIndexList&#39;")
    @Override
    public List<CrmBanner> selectIndexList() {
    List<CrmBanner> list = baseMapper.selectList(new
    QueryWrapper<CrmBanner>().orderByDesc("sort"));
    return list;
     }
    
    @CacheEvict(value = "banner", allEntries=true)
    @Override
    public void removeBannerById(String id) {
    baseMapper.deleteById(id);
     }

    redis:

    SpringBoot 統合 Redis のアノテーションは何ですか?

    基本関数:

    クエリの使用法: @Cacheable アノテーション

    削除の変更: @CacheEvict アノテーションを使用します

    追加 : @CachePut アノテーションを使用します

    以上がSpringBoot 統合 Redis のアノテーションは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。