Centos6下Redis學習(一)——Java客戶端Lettuce的使用

幾年前我用的還是Jedis,貌似現在Lettuce更加流行了,而且Springboot現在集成的也是Lettuce

官方文檔https://lettuce.io/docs/getting-started.html

1 Lettuce

1.1 建立連接

添加Maven依賴

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;

public class RedisOperation {
    public static void firstConnect(String password, String host, String port) {
        RedisClusterClient redisClient = RedisClusterClient.create("redis://" + password + "@" + host + ":" + port);
        StatefulRedisClusterConnection<String, String> connection = redisClient.connect();
        System.out.println("成功連接Redis");
        connection.close();
        redisClient.shutdown();
    }

    public static void main(String[] args) {
        firstConnect("password", "你的IP", "端口");
    }
}

1.2 簡單增刪改查

嗯,多吃粗糧,對身體好

import io.lettuce.core.api.sync.RedisStringCommands;
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands;
import io.lettuce.core.cluster.api.sync.RedisClusterCommands;

public class RedisOperation {
    public static void simpleOperation(String password, String host, String port) {
        RedisClusterClient redisClient = RedisClusterClient.create("redis://" + password + "@" + host + ":" + port);
        StatefulRedisClusterConnection<String, String> connection = redisClient.connect();
        RedisClusterCommands<String, String> commands = connection.sync();
        commands.set("蔬菜", "土豆");
        System.out.println(commands.get("蔬菜"));
        commands.set("蔬菜", "地瓜");
        System.out.println(commands.get("蔬菜"));
        commands.del("蔬菜");
        System.out.println(commands.get("蔬菜"));
        connection.close();
    }

    public static void main(String[] args) {
        simpleOperation("password", "你的IP", "端口");
    }
}

2 springboot整合

sprintboot內置了Lettuce,官方文檔https://docs.spring.io/spring-data/redis/docs/2.0.13.RELEASE/reference/html/#redis

springboot提供了RedisTemplate,封裝了底層Redis框架的所有操作,支持Jedis和Lettuce,默認使用Lettuce框架。RedisTemplate是線程安全的,且封裝了所有連接的管理,使用極度方便

2.1 配置

因爲Redis是有密碼的,所以需要稍微配置一下Redis連接

在項目裏新建springboot配置文件application.yml,nodes裏面是IP:端口的、以逗號分隔的列表

redis:
  nodes:
    IP:7000, IP:7001, IP:7002, IP:7003, IP:7004, IP:7005
  pass:
    password

新建RedisConfig類

package com.chinatelecom.flydragon.redis;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.List;

@Configuration
public class RedisConfig {
    // Redis 主機列表
    @Value("#{'${spring.redis.nodes}'.split(', ')}")
    private List<String> redisHosts;
    
    // Redis 密碼
    @Value("${spring.redis.pass}")
    private String redisPass;
    
    /*
        Redis 連接工廠
     */
    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        RedisClusterConfiguration configuration = new RedisClusterConfiguration(redisHosts);  // Redis 集羣配置
        configuration.setPassword(RedisPassword.of(redisPass));  // 設置密碼
        return new LettuceConnectionFactory(configuration);
    }
    
    /*
        RedisTemplate
     */
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);  // 設置 Redis 連接工廠
        return template;
    }
}

2.2 Redis操作

這裏做了兩個操作,一個是Redis基本的value操作,set和get,另一個是隊列數據結構

就是這麼簡單,一個RedisTemplate支持所有的操作,肥腸神奇方便

package com.chinatelecom.flydragon.redis;

import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class Operation {
    @Resource(name="redisTemplate")
    private ValueOperations<String, String> valueOps;

    public void value() {
        valueOps.set("蔬菜", "土豆");
        System.out.println(valueOps.get("蔬菜"));
    }

    @Resource(name="redisTemplate")
    private ListOperations<String, String> listOps;

    public void list() {
        listOps.leftPush("食物", "榴蓮");
        listOps.rightPush("食物", "烤羊排");
        listOps.leftPush("食物", "拿破崙");
        System.out.println(listOps.range("食物", 0, -1));
    }
}

寫個測試調用一下,完美

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章