使用 Java 操作 Redis

Jedis

1. 概述

Jedis 是一款使用 Java 操作 Redis 的工具,有點類似於 JDBC

2. 引入依賴

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

3. 操作

// 創建 jedis 客戶端對象
Jedis jedis = new Jedis("39.108.6.119", 6379);
// 選擇使用一個庫,默認 0 號庫
jedis.select(0);
// 清空當前庫
jedis.flushDB();
//設置 redis 字元串數據
jedis.set("key", "value");
//存儲數據到列表中
jedis.lpush("list", "value1");
jedis.lpush("list", "value2");
jedis.lpush("list", "value3");
// 更多操作
...
// 釋放資源
jedis.close();

具體 API 參考官網文檔://www.javadoc.io/doc/redis.clients/jedis/latest/index.html

SpringBoot 整合 Redis

1. 概述

SpringData 提供了 RedisTemplate 和 StringRedisTemplate,後者是前者的子集。兩個模板基本一致,不同之處體現在操作的數據類型不同。RedisTemplate 中 key 和 value 泛型都是 Object,可以存儲一個對象。而 StringRedisTemplate 的兩個泛型都是 String,只能存儲字元串

2. 引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3. 操作

@SpringBootTest(classes = RedisSpringbootApplication.class)
@RunWith(SpringRunner.class)
public class TestRedisTemplate {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() {
        stringRedisTemplate.opsForValue().set("name", "jack");
        String name = stringRedisTemplate.opsForValue().get("name");
        // 更多操作...
    }
}

具體 API 參考官網文檔://docs.spring.io/spring-data/redis/docs/current/api/

4. 序列化

無論使用 StringRedisTemplate 還是 RedisTemplate,都會對 key 和 value 進行序列化

Spring-Data-Redis 的序列化方式是通過實現 RedisSerializer 介面,每一種實現都對應不同的序列化方式

4.1 JDK 序列化

org.springframework.data.redis.serializer.JdkSerializationRedisSerializer,RedisTemplate 的默認序列化方式,序列化對象需實現 Serializable 介面,絕大多數情況下,不推薦使用該方式,因為這種方式序列化之後保存的是位元組序列,對閱讀不友好

4.2 String 序列化

org.springframework.data.redis.serializer.StringRedisSerializer,StringRedisTemplate 的默認序列化方式,這種實現方式比較輕量與高效,但只能對字元串序列化,無法對普通對象序列化

4.3 Json 序列化

org.springframework.data.redis.serializer.Jackson2JsonRedisSerializerorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer,兩者都是使用 Jackson 實現 JSON 的序列化方式,不同的是,前者必須在構造序列化對象時傳入對象的類型,後者則不需要,並且序列化時將對象類型也保存了

4.4 修改序列化方案
// 以修改序列化方案為 StringRedisSerializer 為例
// 修改 key 序列化方案
redisTemplate.setKeySerializer(RedisSerializer.string());
// 修改 value 序列化方案
redisTemplate.setValueSerializer(RedisSerializer.string());
// 修改 hash key 序列化方案
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 修改 hash value 序列化方案
redisTemplate.setHashValueSerializer(RedisSerializer.string());

Tags: