1. Redis多种连接方式

在上篇文档中已经部署好了 Redis ,接下来学习如何连接到 Redis 。可以通过以下几种方式进行连接:

  • Redis Cli 命令行界面
  • 可视化管理工具
  • 编程语言客户端库

2. Redis Cli

官方提供了 redis-cli 工具,通过命令行界面和 Redis 进行交互,在安装目录中可以看到该工具:

image-20240913095349423

操作示例:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set mykey "Hello"
OK
127.0.0.1:6379> get mykey
"Hello"

3. 可视化管理工具

3.1 Another Redis Desktop Manager

支持哨兵, 集群, ssh通道, ssl认证, stream, subscribe订阅, 树状视图, 命令行, 以及暗黑模式; 多种格式化方式, 甚至能够自定义格式化脚本, 满足你的一切需求。这个目前本人使用,感觉非常棒

下载地址:https://goanother.com/cn/

image-20240913100236218

3.2 RedisDesktopManager

RedisDesktopManager 是一个非官方的可视化管理工具,界面十分简洁,用起来很舒服,推荐一下。

安装地址:https://docs.rdm.dev/en/2019/install/

image-20240913101224066

4. 客户端库列表

Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存或消息传递系统。由于 Redis 的流行和灵活性,许多编程语言都提供了与之交互的客户端库。以下是一些支持 Redis 的编程语言及其客户端库:

  1. Python - redis-py
  2. Ruby - redis-rb
  3. Java - Jedis, Lettuce, Redisson
  4. Node.js - node-redis, ioredis
  5. PHP - phpredis
  6. C# (.NET) - StackExchange.Redis, ServiceStack.Redis
  7. Go - go-redis/redis, Redigo
  8. JavaScript (Node.js) - node-redis, ioredis
  9. Lua - 内置在 Redis 服务器中
  10. Erlang - eredis
  11. Scala - Alpakka (使用 Akka Streams)
  12. Rust - redis-rs
  13. Haskell - hedis
  14. Clojure - clojure-redis
  15. Perl - Redis
  16. Dart - redis_client
  17. Swift - RediStack
  18. Objective-C - RediStack (iOS/macOS)
  19. R - redislite
  20. Bash - 可以使用 redis-cli 命令行工具

5.Java端示例

5.1 Jedis

Jedis 是一个同步阻塞的 Redis Java 客户端库,其优点是简单易用、成熟稳定。使用同步阻塞的方式与 Redis 进行通信,在高并发场景下,性能不佳。此外Jedis 实例不是线程安全的,需要通过 JedisPool 连接池管理实例。

引入依赖:

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

连接并执行操作示例:

public class JedisTest {
    public static void main(String[] args) {
        // 创建连接池
        JedisPool pool = new JedisPool("localhost", 6379,"default","123456");
        // 获取客户端
        try (Jedis jedis = pool.getResource()) {
            // 存入一个字符串
            jedis.set("foo", "bar");
            System.out.println(jedis.get("foo"));   //Prints: bar

            // 存入一个Hash
            Map<String, String> hash = new HashMap<>();;
            hash.put("name", "John");
            hash.put("surname", "Smith");
            hash.put("company", "Redis");
            hash.put("age", "29");
            jedis.hset("user-session:123", hash);
            System.out.println(jedis.hgetAll("user-session:123"));  // Prints: {name=John, surname=Smith, company=Redis, age=29}
        }
    }
}

5.2 Lettuce

Lettuce 是一个可扩展的线程安全的 Redis Java 客户端库,可用于同步、异步和响应式,API较为复杂抽象,所以学习成本较高。底层使用的是 Netty ,使用异步非阻塞的方式与 Redis进行通信,在高并发场景下,性能更好。此外Lettuce 实例是线程安全的,无需额外处理线程同步问题。

引入依赖:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.3.2.RELEASE</version> <!-- Check for the latest version on Maven Central -->
</dependency>

连接并执行操作示例:

public class LettceTest {

    public static void main(String[] args) {
        // 创建客户端
        RedisClient redisClient = RedisClient.create("redis://localhost:6379");
        // 获取连接
        try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
            // 执行异步命令
            RedisAsyncCommands<String, String> asyncCommands = connection.async();

            // 存入一个字符串
            asyncCommands.set("foo", "bar").get();
            System.out.println(asyncCommands.get("foo").get()); // prints bar

            // 存入一个Hash
            Map<String, String> hash = new HashMap<>();
            hash.put("name", "John");
            hash.put("surname", "Smith");
            hash.put("company", "Redis");
            hash.put("age", "29");
            asyncCommands.hset("user-session:123", hash).get();

            System.out.println(asyncCommands.hgetall("user-session:123").get()); // Prints: {name=John, surname=Smith, company=Redis, age=29}
        } catch (ExecutionException | InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            redisClient.shutdown();
        }
    }
}

5.3 Redission

Redission 是一个高性能、异步无锁的 Redis Java 客户端库,基于 Netty 进行通信。Redission提供了一些列的分布式服务工具,例如分布式对象、分布式锁、分布式任务调度、分布式数据数据处理、分布式会话集群等。

引入依赖:

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.31.0</version>
</dependency>

连接并执行操作示例:

public class RedissonTest {

    public static void main(String[] args) {
        // 创建客户端对象
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redissonClient = Redisson.create(config);

        // 存入一个 Map
        RMap<String, String> rMap = redissonClient.getMap("rMap"); // 创建Map分布式对象
        rMap.put("name", "John"); // 存入数据
        rMap.put("surname", "Smith");
        rMap.put("company", "Redis");

        // 重新获取
        RMap<String, String> getMap = redissonClient.getMap("rMap");
        System.out.println(getMap);
    }
}