ホームページ  >  記事  >  データベース  >  SpringBoot で Redis を使用する方法

SpringBoot で Redis を使用する方法

WBOY
WBOY転載
2023-06-02 14:43:211950ブラウズ

1. 依存関係

Maven の依存関係は次のとおりです Spring-boot-starter-data-redis はデフォルトで Redis クライアントのドライバーとしてレタスを使用しますが、レタスは実際にはあまり実用的ではないことに注意してください私たち Jedis は一般的にクライアント ドライバーとして使用されるため、ここではレタスは除外され、jedis が導入されます:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2. 依存関係

Spring Data Redis の依存関係:

SpringBoot で Redis を使用する方法

この依存関係が表現したいことは、Spring が RedisConnection を通じて Redis を操作し、RedisConnection がネイティブ Jedis 行をカプセル化するということです。 RedisConnection インターフェイス オブジェクトを取得するには、RedisConnectionFactory を通じて生成されます。

3. 構成

構成用の構成ファイル:

# Redis 连接配置
# 单机 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 连接池配置
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-total=50
spring.redis.jedis.pool.max-wait=2000ms

構成用のコード:

@Configuration
public class RedisConfig {
    private RedisConnectionFactory connectionFactory = null;
 
    @Bean
    public RedisConnectionFactory initRedisConnectionFactory(){
        if(connectionFactory!=null){
            return connectionFactory;
        }
        JedisPoolConfig poolConfig =new JedisPoolConfig();
        //最大空闲数
        poolConfig.setMaxIdle(30);
        //最大连接数
        poolConfig.setMaxTotal(50);
        //最大等待毫秒数
        poolConfig.setMaxWaitMillis(2000);
        //创建Jedis连接工厂
        JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig);
        //获取单机的redis配置,如果是集群的话用集群配置类
        RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return connectionFactory;
    }
}

4.RedisTemplate

ここで説明しますさらに、RedisConnection を直接使用して Redis を操作する場合、手動で RedisConnectionFactory にアクセスして RedisConnection を取得する必要があり、毎回手動で RedisConnection を閉じる必要があります。そこで Spring Data Redis では、jedis からカプセル化され、リソースの取得と解放のステップをブロックして運用を容易にする RedisTemplate を提供しています。

RedisTemplate を使用する際に注意すべき中心的な点は、そのシリアライザーです。RedisTemplate には複数のシリアライザーがあります。異なるシリアライザーは、キー値の書き込みと Redis の読み出しのプロセスでシリアル化を使用します。メソッドは異なります。シリアル化された結果も異なります。たとえば、文字を処理する場合は文字列固有のシリアライザーを使用する必要があり、オブジェクトを処理する場合はオブジェクト固有のシリアライザーを使用する必要があります。

現在のシリアライザーは次のとおりです:

SpringBoot で Redis を使用する方法

StringRedisSerializer:

StringRedisSerializer は、RedisTemplate によって使用されるデフォルトのキーです。 Value のシリアライザーは、UTF-8 エンコーディングを使用して文字列をバイト配列にシリアル化します。 Redis の Key と Value はどちらも文字列であるため、デフォルトの StringRedisSerializer シリアライザーはほとんどの状況のニーズを満たすことができます。

Jackson2JsonRedisSerializer:

Jackson2JsonRedisSerializer は、Jackson の Redis キーと値に基づくシリアライザーです。オブジェクトを JSON 形式の文字列にシリアル化し、Redis に保存できます。 Jackson2JsonRedisSerializer シリアライザーを使用するには、Jackson 依存関係を追加する必要があります。オブジェクトを JSON 形式の文字列に変換することも、JSON 形式の文字列をオブジェクトに変換することもできます。

JdkSerializationRedisSerializer:

JdkSerializationRedisSerializer は、Java 独自のシリアル化メソッドに基づいたシリアライザーで、オブジェクトをストレージ用のバイト配列にシリアル化できます。 JdkSerializationRedisSerializer はシンプルで使いやすいですが、効率が比較的低く、シリアル化されたバイト配列が比較的大きいため、大量のデータを保存するのには適していません。

GenericJackson2JsonRedisSerializer:

GenericJackson2JsonRedisSerializer は、ジェネリックスをサポートする Jackson2JsonRedisSerializer です。これにより、任意の種類のオブジェクトをシリアル化し、オブジェクトを JSON 形式の文字列にシリアル化できます。シリアル化と逆シリアル化の両方でターゲットの型を指定する必要があります。

OxmSerializer:

OxmSerializer は、Spring の O/X マッピング フレームワークに基づくシリアライザーであり、オブジェクトを XML 形式の文字列にシリアル化することをサポートします。 OxmSerializer は柔軟性が高いものの、シリアル化および逆シリアル化のパフォーマンスが低く、大量のデータの保存には適していません。

つまり、シリアライザーを選択するときは、実際の状況に基づいて選択し、データ型とパフォーマンス要件に基づいて適切なシリアライザーを選択する必要があります。

これを使用するときは、設定するだけで済みます。設定すると、すべての Redis タイプのデータ構造に効果的であるか、特定のタイプのデータ構造に効果的であるかなど、多くの効果的な粒度オプションが提供されます。 redis データ構造タイプ:

SpringBoot で Redis を使用する方法

たとえば、グローバルに有効になる String シリアライザーを使用したいと考えています:

@Bean
public RedisTemplate<Object,Object> initRedisTemplate(){
  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setDefaultSerializer(new StringRedisSerializer());
  return redisTemplate;
}

5. 基本操作

以下は RedisTemplate を使用して redis を操作する基本的なデータ型のコード例です:

@Bean が RedisTemplate を定義する場合、ジェネリック型は使用時にジェネリック型と一致する必要があることに注意してください。

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class RedisService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
 
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
 
    public void setHash(String key, String hashKey, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put(key, hashKey, value);
    }
 
    public Object getHash(String key, String hashKey) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get(key, hashKey);
    }
 
    public void setList(String key, Object value) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        listOps.rightPush(key, value);
    }
 
    public Object getList(String key, long index) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        return listOps.index(key, index);
    }
 
    public void setSet(String key, Object value) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        setOps.add(key, value);
    }
 
    public Object getSet(String key) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        return setOps.members(key);
    }
 
    public void setZSet(String key, Object value, double score) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        zsetOps.add(key, value, score);
    }
 
    public Object getZSet(String key, long start, long end) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        return zsetOps.range(key, start, end);
    }
 
}

6. トランザクション

以下はトランザクションを使用したコード例です:

@Autowired
private RedisTemplate<String, String> redisTemplate;
 
public void transactionalOperation() {
    // 开启 Redis 事务
    redisTemplate.multi();
 
    try {
        // 执行多个 Redis 命令
        redisTemplate.opsForValue().set("key1", "value1");
        redisTemplate.opsForValue().set("key2", "value2");
 
        // 提交事务
        redisTemplate.exec();
    } catch (Exception e) {
        // 回滚事务
        redisTemplate.discard();
    }
}

以上がSpringBoot で Redis を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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