1. Redis多种连接方式
在上篇文档中已经部署好了 Redis
,接下来学习如何连接到 Redis
。可以通过以下几种方式进行连接:
Redis Cli
命令行界面- 可视化管理工具
- 编程语言客户端库
2. Redis Cli
官方提供了 redis-cli
工具,通过命令行界面和 Redis
进行交互,在安装目录中可以看到该工具:
操作示例:
[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/
3.2 RedisDesktopManager
RedisDesktopManager
是一个非官方的可视化管理工具,界面十分简洁,用起来很舒服,推荐一下。
安装地址:https://docs.rdm.dev/en/2019/install/
4. 客户端库列表
Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存或消息传递系统。由于 Redis 的流行和灵活性,许多编程语言都提供了与之交互的客户端库。以下是一些支持 Redis 的编程语言及其客户端库:
- Python -
redis-py
- Ruby -
redis-rb
- Java -
Jedis
,Lettuce
,Redisson
- Node.js -
node-redis
,ioredis
- PHP -
phpredis
- C# (.NET) -
StackExchange.Redis
,ServiceStack.Redis
- Go -
go-redis/redis
,Redigo
- JavaScript (Node.js) -
node-redis
,ioredis
- Lua - 内置在 Redis 服务器中
- Erlang -
eredis
- Scala -
Alpakka
(使用 Akka Streams) - Rust -
redis-rs
- Haskell -
hedis
- Clojure -
clojure-redis
- Perl -
Redis
- Dart -
redis_client
- Swift -
RediStack
- Objective-C -
RediStack
(iOS/macOS) - R -
redislite
- 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);
}
}