redis 支持很多语言的客户端。在官方网站上有支持的所有的 redis 客户端列表 。
因为平时使用 java 作为开发语言,所以这里描述一下如何通过 java 来连接和操作 redis 服务器。在官方文档中, Java 推荐的 redis 客户端是 Jedis ,这里我们也用这个客户端对 redis 服务器进行操作。
首先我们建立一个 maven 工程,在工程的 pom.xml 文件中加入 Jedis 的依赖引用。为了方便测试,还加入了 Junit 依赖。文件内容如下。
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.x9710.common</groupId>
- <artifactId>redis-util</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.9.0</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
建立 redis 连接类 com.x9710.common.redis.RedisConnection 。内容如下 package com.x9710.common.redis;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- public class RedisConnection {
- /**
- * redis 连接池配置信息
- */
- private JedisPoolConfig jedisPoolConfig;
- /**
- * redis 服务器地址
- */
- private String ip;
- /**
- * redis 服务器端口
- */
- private Integer port;
- /**
- * redis 服务器密码
- */
- private String pwd;
- /**
- * redis 服务器连接超时时间
- */
- private Integer timeOut;
- /**
- * redis 连接客户端名称
- */
- private String clientName = null;
- private JedisPool jedisPool;
- public void setJedisPoolConfig(JedisPoolConfig jedisPoolConfig) {
- this.jedisPoolConfig = jedisPoolConfig;
- }
- public void setIp(String ip) {
- this.ip = ip;
- }
- public void setPort(Integer port) {
- this.port = port;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- public void setTimeOut(Integer timeOut) {
- this.timeOut = timeOut;
- }
- public void setClientName(String clientName) {
- this.clientName = clientName;
- }
- private void buildConnection() {
- if (jedisPool == null) {
- if (jedisPoolConfig == null) {
- jedisPool = new JedisPool(new JedisPoolConfig(), ip, port, timeOut, pwd, 0, clientName);
- } else {
- jedisPool = new JedisPool(jedisPoolConfig, ip, port, timeOut, pwd, 0, clientName);
- }
- }
- }
- public Jedis getJedis() {
- buildConnection();
- if (jedisPool != null) {
- return jedisPool.getResource();
- }
- return null;
- }
}
用一个测试类 com.x9710.common.redis.test.RedisConnectionTest 来测试 rdis 连接功能.
- package com.x9710.common.redis.test;
- import com.x9710.common.redis.RedisConnection;
- import org.junit.Assert;
- import org.junit.Before;
- import org.junit.Test;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPoolConfig;
- public class RedisConnectionTest {
- private RedisConnection redisConnection;
- @Before
- public void before() {
- JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
- //设置 redis 连接池最大连接数量
- jedisPoolConfig.setMaxTotal(50);
- //设置 redis 连接池最大空闲连接数量
- jedisPoolConfig.setMaxIdle(10);
- //设置 redis 连接池最小空闲连接数量
- jedisPoolConfig.setMinIdle(1);
- redisConnection = new RedisConnection();
- redisConnection.setIp("10.110.2.56");
- redisConnection.setPort(52981);
- redisConnection.setPwd("hhSbcpotThgWdnxJNhrzwstSP20DvYOldkjf");
- redisConnection.setClientName(Thread.currentThread().getName());
- redisConnection.setTimeOut(600);
- redisConnection.setJedisPoolConfig(jedisPoolConfig);
- }
- @Test
- public void testPutGet() {
- Jedis jedis = redisConnection.getJedis();
- try {
- jedis.select(1);
- jedis.set("name","grace");
- Assert.assertTrue("grace".equals(jedis.get("name")));
- } finally {
- if (jedis != null) {
- jedis.close();
- }
- }
- }
- }
在 ide 环境中执行测试用例,结果如下。
现在,我们就在 Java 中利用 Jedit 客户端建立和 redis 的连接并且可以执行操作。对应的代码发布到了 GitHub 中
原文发表在简书中, 原始链接来源: https://juejin.im/post/5a4982a46fb9a0450a67b1a4