Spring BootのRedisを巧みに使う


Spring BootのRedisから転載
Redisの紹介
Redisは現在、業界で最も広く使用されているメモリデータストレージです.Memcachedに比べて、Redisはhashes、lists、setsなど、より豊富なデータ構造をサポートし、データの永続化をサポートします.このほか、Redisはトランザクション、HA、プライマリ・スレーブ・ライブラリなどのクラス・データベースの特性も提供します.Redisはキャッシュシステムとデータベースのいくつかの特性を兼ね備えているため、豊富な応用シーンを持っていると言える.この論文ではSpring BootにおけるRedisの2つの典型的な応用シーンを紹介する.使用方法
1、依存パッケージの導入
org.springframework.bootspring-boot-starter-data-redisorg.apache.commonscommons-pool2
Spring Bootは、Redisに統合されたコンポーネントパッケージを提供します.spring-boot-starter-data-redis、spring-boot-starter-data-redisはspring-data-redisおよびlettuceに依存します.Spring Boot 1.0のデフォルトはJedisクライアントで、2.0はLettuceに置き換えられますが、Spring Boot 1.5から使用する場合は.Xを切り替えると、spring-boot-starter-data-redisが私たちの違いを隔離しているため、ほとんど違いを感じません.
Lettuceは、優れたnetty NIOフレームワークを利用して複数の接続を効率的に管理する、同じRedisConnectionを共有できる、伸縮性のあるスレッドで安全なRedisクライアントです.
2、プロファイルの追加
# Redis     (   0)
spring.redis.database=0  
# Redis     
spring.redis.host=localhost
# Redis       
spring.redis.port=6379  
# Redis       (    )
spring.redis.password=
#         (          )    8
spring.redis.lettuce.pool.max-active=8
#            (          )    -1
spring.redis.lettuce.pool.max-wait=-1
#                8
spring.redis.lettuce.pool.max-idle=8
#                0
spring.redis.lettuce.pool.min-idle=0

3、cacheの構成クラスを追加する
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{

    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
}

注記:@EnableCachingを使用してキャッシュを開きます.
4、よし、これからはそのまま使える
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedis {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() throws Exception {
        stringRedisTemplate.opsForValue().set("aaa", "111");
        Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
    }

    @Test
    public void testObj() throws Exception {
        User user=new User("[email protected]", "aa", "aa123456", "aa","123");
        ValueOperations operations=redisTemplate.opsForValue();
        operations.set("com.neox", user);
        operations.set("com.neo.f", user,1, TimeUnit.SECONDS);
        Thread.sleep(1000);
        //redisTemplate.delete("com.neo.f");
        boolean exists=redisTemplate.hasKey("com.neo.f");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
       // Assert.assertEquals("aa", operations.get("com.neo.f").getUserName());
    }
}

以上はすべて手動で使用する方法で、どのようにデータベースを検索する時に自動的にキャッシュを使用しますか?
5、自動的に方法によってキャッシュを生成する
@RestController
public class UserController {

    @RequestMapping("/getUser")
    @Cacheable(value="user-key")
    public User getUser() {
        User user=new User("[email protected]", "aa", "aa123456", "aa","123");
        System.out.println("      “        ”               ");
        return user;
    }
}

valueの値はRedisにキャッシュされたkey共有セッションです
分散システムでは、Session共有には多くのソリューションがあり、キャッシュに管理されるのが最も一般的なソリューションの1つであるべきであり、Spring Sessionの公式説明
Spring Session provides an API and implementations for managing a user’s session information.
Spring Sessionは、サーブレットHttpSessionを作成および管理する一連のスキームを提供します.Spring SessionはクラスタSession(Clustered Sessions)機能を提供し、デフォルトでは外部のRedisを使用してSessionデータを格納し、Session共有の問題を解決します.使用方法
1、導入依存

    org.springframework.session
    spring-session-data-redis

2、Session配置:
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

maxInactiveIntervalInSeconds:セッションの有効期限を設定し、Redisセッションを使用した後、元Spring Bootのserver.session.timeoutプロパティは有効になりません.
では、これで構成が整いました.テストしてみましょう.
3、テスト
テストメソッドの追加sessionidの取得
@RequestMapping("/uid")
String uid(HttpSession session) {
    UUID uid = (UUID) session.getAttribute("uid");
    if (uid == null) {
        uid = UUID.randomUUID();
    }
    session.setAttribute("uid", uid);
    return session.getId();
}
   Redis    keys 'sessions'
t

このうち147276480000は失効時間であり、この時間後にSessionが失効することを意味し、db 031986-8 ecc-48 d 6-b 471-b 137 a 3 ed 6 bc 4はsessionIdであり、登録http://localhost:8080/uid発見が一致したのは、SessionがRedisで有効な管理を行っていることを示しています.Sessionを2台または複数台で共有する方法
実は上の手順で別の項目で再構成し、起動すると自動的にセッション共有が行われます.