Spring bootプロジェクト実戦:redis

4893 ワード

「spring bootプロジェクト実戦」のredisが使用され、本人が構築したspring boot webバックエンド開発フレームワークがGitHubにアップロードされました.ツッコミを歓迎します.https://github.com/q7322068/rest-base

1、maven依存を追加する



    org.springframework.boot
    spring-boot-starter-data-redis


2、redis構成の追加


ローカル(単点redis)
アプリケーション-local.properties(ローカル構成)にredis構成を追加するには、次の手順に従います.
###redis  ###
spring.redis.host=127.0.0.1    
spring.redis.port=7001  
spring.redis.database=0
spring.redis.password=pwd

# pool settings ...       
spring.redis.pool.max-idle=4
spring.redis.pool.min-idle=1
spring.redis.pool.max-active=4
spring.redis.pool.max-wait=2000

ローカルredisにパスワードがない場合はspringを削除します.redis.passwordでいいです.
テスト&公式環境(哨兵)
アプリケーション-dev.properties(テスト環境)およびアプリケーション-prod.properties(本番環境)にredis構成を追加します.
###redis  ###
spring.redis.database=0
spring.redis.password=pwd

# pool settings ...       
spring.redis.pool.max-idle=4
spring.redis.pool.min-idle=1
spring.redis.pool.max-active=4
spring.redis.pool.max-wait=2000

#    redis server    
spring.redis.sentinel.master=mymaster
#         
spring.redis.sentinel.nodes=host:port,host2:port2

3、StringRedisTemplateで操作する


注入StringRedisTemplate:
@Autowired
private StringRedisTemplate redisTemplate;

RedisTemplateを使用して操作します.
//    ,            
redisTemplate.opsForValue().set("test", "test", 10, TimeUnit.SECONDS);
//     
String value = redisTemplate.opsForValue().get("test");

//     
redisTemplate.delete("test");

//  set
redisTemplate.opsForSet().add("testSet", "1");
Set members = redisTemplate.opsForSet().members("testSet");//  set     
redisTemplate.opsForSet().remove("testSet", "1","2");//  set      

//  list
redisTemplate.opsForList().rightPush("testList", "1");
List list = redisTemplate.opsForList().range("testList", 0, -1);//  list      

StringRedisTemplateはredis操作をよくカプセル化し、キー、文字列、ハッシュ、リスト、集合、秩序集合、HyperLogの操作に良好なサポートを提供した.基本的な使い方はredisTemplate.opsForXXX、XXXはタイプで、opsForValueは操作文字列です.opsForSetは操作集合、opsForListは操作リスト、opsForZSetは操作秩序集合、opsForHyperLogは操作HyperLogであり、基本的にその方法とredisコマンドは対応しており、名前と方法注釈に基づいて方法に対応するredisコマンドを迅速に特定することができる.

4、RedisTemplateで操作する


1、RedisObjectSerializerを作成する.java
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

public class RedisObjectSerializer implements RedisSerializer {
    private Converter serializer = new SerializingConverter();
    private Converter deserializer = new DeserializingConverter();
    static final byte[] EMPTY_ARRAY = new byte[0];

    public Object deserialize(byte[] bytes) {
        if (isEmpty(bytes)) {
            return null;
        }
        try {
            return deserializer.convert(bytes);
        } catch (Exception ex) {
            throw new SerializationException("Cannot deserialize", ex);
        }
    }

    public byte[] serialize(Object object) {
        if (object == null) {
            return EMPTY_ARRAY;
        }
        try {
            return serializer.convert(object);
        } catch (Exception ex) {
            return EMPTY_ARRAY;
        }
    }

    private boolean isEmpty(byte[] data) {
        return (data == null || data.length == 0);
    }
}

2、redisTemplateを構成してRedisConfigを作成する.java
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new RedisObjectSerializer());
        return template;
    }
}

3、RedisTemplateを使う
//  RedisTemplate  
@Autowired
private RedisTemplate objRedisTemplate;

//  RedisTemplate
User user = new User();
user.setId(1);
user.setName("test");
objRedisTemplate.opsForValue().set("user", user,10,TimeUnit.SECONDS);
user = (User) objRedisTemplate.opsForValue().get("user");