一、背景

  上篇文章我们介绍了如何在centos7下面进行安装单机版redis以及redis集群。这篇文章,我们来聊一聊如何使用java客户端来进行操作redis。我们知道redis的java客户端有很多,如:jedis、redission等。这篇文章着重介绍我们平常使用最多的redis的java客户端jedis。

二、通过单元测试来小试牛刀

  1.首先在maven的pom.xml中引入jedis-client的依赖

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

  2.使用junit进行单元测试

package com.hafiz.redis.test;

import java.util.HashSet;
import java.util.Set; import org.junit.Test; import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool; public class JedisTest { @Test
public void testJedisSingle() {
// 创建一个jedis连接
Jedis client = new Jedis("192.168.25.153", 6379);
client.set("name", "zhangsan");
String name = client.get("name");
System.out.println(name);
// 关闭连接
client.close();
} @Test
public void testJedisPoolSingle() {
// 创建一个连接池对象,系统中应该是单例的
JedisPool pool = new JedisPool("192.168.25.153", 6379);
// 从连接池中获取一个连接
Jedis client = pool.getResource();
client.set("age", "100");
String name = client.get("name");
String age = client.get("age");
System.out.println(name);
System.out.println(age);
// jedis必须关闭连接
client.close(); // 关闭连接池
pool.close();
} @Test
public void testJedisCluster() {
// 创建一个jedisCluster对象的节点集合
Set<HostAndPort> nodes = new HashSet<>();
// 在nodes中指定每个节点的地址
nodes.add(new HostAndPort("192.168.25.153", 7001));
nodes.add(new HostAndPort("192.168.25.153", 7002));
nodes.add(new HostAndPort("192.168.25.153", 7003));
nodes.add(new HostAndPort("192.168.25.153", 7004));
nodes.add(new HostAndPort("192.168.25.153", 7005));
nodes.add(new HostAndPort("192.168.25.153", 7006));
// 创建一个jedisCluster对象,该对象在系统中应该是单例的
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("id", "100");
cluster.set("value", "Hello Jedis");
System.out.println(cluster.get("id"));
System.out.println(cluster.get("value")); // 系统关闭时,关闭集群
cluster.close();
}
}

三、在项目中,使用Spring集成Redis

1.redis.properties文件如下:

#Redis stand-alone config
redis.single.host=192.168.25.153
redis.single.port=6379 #Redis cluster config
redis.cluster.node1.host=192.168.25.153
redis.cluster.node1.port=7001
redis.cluster.node2.host=192.168.25.153
redis.cluster.node2.port=7002
redis.cluster.node3.host=192.168.25.153
redis.cluster.node3.port=7003
redis.cluster.node4.host=192.168.25.153
redis.cluster.node4.port=7004
redis.cluster.node5.host=192.168.25.153
redis.cluster.node5.port=7005
redis.cluster.node6.host=192.168.25.153
redis.cluster.node6.port=7006

2.spring-redis配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
   xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
  http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- Redis stand-alone config -->
<bean id = "jedisPool" class = "redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="${redis.single.host}"/>
<constructor-arg name="port" value="${redis.single.port}"/>
</bean>
<bean id = "singleJedisClient" class = "com.taotao.rest.component.impl.SingleJedisClient"/>    <!-- Redis cluster config -->
   <!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node1.host}"/>
<constructor-arg name="port" value="${redis.cluster.node1.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node2.host}"/>
<constructor-arg name="port" value="${redis.cluster.node2.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node3.host}"/>
<constructor-arg name="port" value="${redis.cluster.node3.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node4.host}"/>
<constructor-arg name="port" value="${redis.cluster.node4.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node5.host}"/>
<constructor-arg name="port" value="${redis.cluster.node5.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.cluster.node6.host}"/>
<constructor-arg name="port" value="${redis.cluster.node6.port}"/>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="clusterJedisClient" class="com.hafiz.rest.component.impl.ClusterJedisClient"/> -->
</beans>

默认放开的是单机版配置,如需使用集群版请注释上面单机版配置,并打开下面集群版配置。

3.接着我们编写一个JedisClient接口类

package com.hafiz.component;

public interface JedisClient {

    String set(String key, String value);
String get(String key);
Long del(String key);
Long hset(String key, String item, String value);
String hget(String key, String item);
Long hdel(String key, String... item);
Long incr(String key);
Long decr(String key);
Long expire(String key, int seconds);
Long ttl(String key);
}

4.然后我们给出单机版的实现类:SingleJedisClient.java

package com.hafiz.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

import com.taotao.rest.component.JedisClient;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; /**
* Redis单机客户端工具类
* @author Administrator
*/
public class SingleJedisClient implements JedisClient { @Autowired
private JedisPool jedisPool; @Override
public String set(String key, String value) {
Jedis client = jedisPool.getResource();
String result = client.set(key, value);
client.close();
return result;
} @Override
public String get(String key) {
Jedis client = jedisPool.getResource();
String result = client.get(key);
client.close();
return result;
} @Override
public Long del(String key) {
Jedis client = jedisPool.getResource();
Long result = client.del(key);
client.close();
return result;
} @Override
public Long hset(String key, String item, String value) {
Jedis client = jedisPool.getResource();
Long result = client.hset(key, item, value);
client.close();
return result;
} @Override
public String hget(String key, String item) {
Jedis client = jedisPool.getResource();
String result = client.hget(key, item);
client.close();
return result;
} @Override
public Long hdel(String key, String... item) {
Jedis client = jedisPool.getResource();
Long result = client.hdel(key, item);
client.close();
return result;
} @Override
public Long incr(String key) {
Jedis client = jedisPool.getResource();
Long result = client.incr(key);
client.close();
return result;
} @Override
public Long decr(String key) {
Jedis client = jedisPool.getResource();
Long result = client.decr(key);
client.close();
return result;
} @Override
public Long expire(String key, int seconds) {
Jedis client = jedisPool.getResource();
Long result = client.expire(key, seconds);
client.close();
return result;
} @Override
public Long ttl(String key) {
Jedis client = jedisPool.getResource();
Long result = client.ttl(key);
client.close();
return result;
} }

5.我们再提供集群版的实现类:ClusterJedisClient.java

package com.hafiz.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

import com.taotao.rest.component.JedisClient;

import redis.clients.jedis.JedisCluster;

/**
* Redis集群客户端工具类
* @author Administrator
*/
public class ClusterJedisClient implements JedisClient { @Autowired
private JedisCluster jedisCluster; @Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
} @Override
public String get(String key) {
return jedisCluster.get(key);
} @Override
public Long del(String key) {
return jedisCluster.del(key);
} @Override
public Long hset(String key, String item, String value) {
return jedisCluster.hset(key, item, value);
} @Override
public String hget(String key, String item) {
return jedisCluster.hget(key, item);
} @Override
public Long hdel(String key, String... item) {
return jedisCluster.hdel(key, item);
} @Override
public Long incr(String key) {
return jedisCluster.incr(key);
} @Override
public Long decr(String key) {
return jedisCluster.decr(key);
} @Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
} @Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
} }

6.spring集成redis单元测试

package com.taotao.rest.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.taotao.rest.component.JedisClient; public class SpringJedisTest { @Test
public void testJedisClientSpring() throws Exception {
//创建一个spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
//从容器中获得JedisClient对象
JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
//jedisClient操作redis
jedisClient.set("cliet1", "1000");
String string = jedisClient.get("cliet1");
System.out.println(string);
}
}

四、总结

  通过本文我们对jedis的使用有了进一步的了解,知道了如何使用spring对redis进行集成,也对jedisClient做了单机以及集群的实现。很有成就感,未来走向架构师的路还有很远,继续努力吧!

使用Java客户端对Redis进行操作的更多相关文章

  1. 从JAVA客户端访问Redis示例(入门)

    转自:http://blog.csdn.net/kkdelta/article/details/7217761 本文记录了安装Redis和从JAVA端访问Redis的步骤 从http://downlo ...

  2. java 框架-缓冲-Redis 2Jedis操作

    https://www.cnblogs.com/wlandwl/p/redis.html Redis介绍及Jedis基础操作   1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数 ...

  3. Kubernetes官方java客户端之七:patch操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 使用java客户端调用redis

    Redis支持很多编程语言的客户端,有C.C#.C++.Clojure.Common Lisp.Erlang.Go.Lua.Objective-C.PHP.Ruby.Scala,甚至更时髦的Node. ...

  5. HBase的java客户端测试(二)---DML操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  6. HBase的java客户端测试(一)---DDL操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  7. 【Redis学习之十一】Java客户端实现redis集群操作

    客户端:jedis-2.7.2.jar 配置文件两种方式: properties: redis.cluster.nodes1=192.168.1.117 redis.cluster.port1=700 ...

  8. java中的redis常用操作

    https://blog.csdn.net/lixiaoxiong55/article/details/81592800    超详细版 常规操作 public class TestReidsComm ...

  9. Jedis客户端即redis中的pipeline批量操作

    关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...

随机推荐

  1. python中global 和 nonlocal的使用

    1.global关键字用来在函数或其他局部作用域中使用全局变量.但是如果不修改全局变量也可以不使用global关键字. gcount = 0 def global_test(): gcount+=1 ...

  2. java基础-day13

    第01天 java面向对象 今日内容介绍 u 继承 u 抽象类 第1章   继承 1.1  继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继 ...

  3. 一天学习两个设计模式之Facade模式(外观模式,结构型模式)

    程序这东西随着时间推移,程序会越来越大,程序中的类越来越多,而且他们之间相互关联,这会导致程序结构变得越来越复杂.因此我们在使用他们时候,必须要弄清楚他们之间的关系才能使用他们. 特别是在调用大型程序 ...

  4. 04:第一个OC类

    1.类与对象的关系 面向对象的核心就是对象,那怎么创建对象? OC中创建对象比较复杂, 首先要理解一个概念叫做类. 现实生活中是根据一份描述,一份模板创建对象,编程语言也一样,也必须先有一份描述,在这 ...

  5. Dinic算法——重述

        赛前赛后算是第三次接触Dinic算法了,每一次接触都能有种很好的感觉,直男的我没法描述~~ 已经比较懂得DInic的基本算法思想了 首先是bfs进行进行分层处理,然后dfs寻找分层后的最大流, ...

  6. libgdx游戏中的中文字体工具类

    // ---------全局Font------------ static FreeTypeFontGenerator Generator; static BitmapFont Font; stati ...

  7. AngularJs 指令中 的Scope属性

    一.概念说明 可以是true. false .哈希对象 {} 1.true 新创建了一个作用域,且继承了父作用域:在初始化的时候,用了父作用域的属性和方法去填充我们这个新的作用域.它和父作用域不是同一 ...

  8. hdu 1.3.4 shǎ崽 OrOrOrOrz

    简单的排序,注意输出即可 #include <iostream> #include <algorithm> using namespace std; int main() { ...

  9. RNN以及LSTM的介绍和公式梳理

    前言 好久没用正儿八经地写博客了,csdn居然也有了markdown的编辑器了,最近花了不少时间看RNN以及LSTM的论文,在组内『夜校』分享过了,再在这里总结一下发出来吧,按照我讲解的思路,理解RN ...

  10. 统计--VARCHAR与NVARCHAR在统计预估上的区别

    最近遇到一个问题,当查询使用到模糊查询时,由于预估返回行数过高,执行计划认为索引查找+Key Lookup的成本过高,因此采用Clustered Index Scan的方式,消耗大量逻辑IO,执行计划 ...