在前面的文章给大家详细的介绍了Redis各种知识点,本文主要给大家介绍下java程序怎么操作Redis数据。


Redis之集群环境搭建


  Redis官网中提供了各种语言的客户端,使用起来很方便,本文主要介绍java中常用的Jedis

Jedis

  Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对redis各类API进行封装调用,通过这些API我们会非常方便的操作我们的Redis数据库。

redis配置的修改

1.注释掉绑定的信息

  在redis.conf的配置文件中bind配置的信息表示的是redis服务可以接收外部访问的地址,这个主要还是为了提高安全性,我们在学习阶段可以将这个信息直接注释掉,这样的话任意的外部ip地址都可以访问。bind是protected-mode配合使用的

bind 127.0.0.1

2.关闭保护模式

  redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:

1、关闭protected-mode模式,此时外部网络可以直接访问

2、开启protected-mode保护模式,需配置bind ip或者设置访问密码

创建项目

创建maven的java项目,添加如下maven坐标

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>

Redis单机版

案例代码:

	/**
* 测试是否连接成功
*/
public void ping(){
Jedis jedis = new Jedis("192.168.88.124", 6379);
System.out.println(jedis.ping()); } /**
* 设置key/value对
*/
public void set(){
Jedis jedis = new Jedis("192.168.88.124", 6379);
jedis.set("name", "張三");
jedis.set("age", "18");
jedis.close();
} /**
* 通过key获取对应的value
*/
public void get(){
Jedis jedis = new Jedis("192.168.88.124", 6379);
String name = jedis.get("name");
String age = jedis.get("age");
System.out.println(name+"--"+age);
jedis.close();
} /**
* 通过Jedis的连接池Pool
*/
public void testJedisPool() {
// 创建Jedis连接池
JedisPool pool = new JedisPool("192.168.88.124", 6379);
// 从连接池中获取Jedis对象
Jedis jedisItem = pool.getResource(); String name = jedisItem.get("name");
System.out.println(name); jedisItem.close();
pool.close();
} /**
* 操作incr方法自增1
*/
public void incr(){
Jedis jedis = new Jedis("192.168.88.124", 6379);
Long age = jedis.incr("age");
System.out.println(age);
}

redis中的数据



操作控制台的输出



Redis集群版

	/**
* 操作Redis集群的数据
* @throws IOException
*/
public void testRedisCluster() throws IOException{
JedisPoolConfig pool = new JedisPoolConfig();
// 设置最大的空闲数
pool.setMaxIdle(2);
// 设置最大连接数
pool.setMaxTotal(30);
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.88.121", 7001));
nodes.add(new HostAndPort("192.168.88.121", 7002));
nodes.add(new HostAndPort("192.168.88.121", 7003));
nodes.add(new HostAndPort("192.168.88.121", 7004));
nodes.add(new HostAndPort("192.168.88.121", 7005));
nodes.add(new HostAndPort("192.168.88.121", 7006));
JedisCluster jedis = new JedisCluster(nodes,pool );
String name = jedis.set("name","lisi");
System.out.println(name);
jedis.close();
pool.clone();
}

Jedis整合Spring

  Jedis单独使用情况还是比较少的,实际开发中和spring整合使用的场景还是比较多的,所以此处介绍下和spring一块使用的情况

maven坐标

	<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
</dependencies>

Redis单机环境

spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd"> <!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10" />
<!-- 每次释放连接的最大数目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 释放连接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 连接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在获取连接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="false" />
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="false" />
<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- jedis客户端单机版 -->
<bean id="redisClient" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.88.124"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean>
</beans>

测试代码

public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisPool pool = ac.getBean("redisClient",JedisPool.class);
Jedis jedis = pool.getResource();
String type = jedis.set("address", "sz");
System.out.println(type);
jedis.close();
pool.close();
}



Redis集群环境

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd"> <!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10" />
<!-- 每次释放连接的最大数目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 释放连接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 连接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在获取连接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="false" />
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="false" />
<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- jedis客户端集群版 -->
<bean id="redisClient" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7001"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.88.121"></constructor-arg>
<constructor-arg name="port" value="7006"></constructor-arg>
</bean>
</set>
</constructor-arg>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean>
</beans>

测试代码

public void test1() throws IOException{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisCluster jedis = ac.getBean("redisClient",JedisCluster.class);
String type = jedis.set("address", "sz-cluster");
System.out.println(type);
jedis.close();
}

添加Jedis到Dao

  Redis是一个NOSQL数据库,我们常用来做缓存数据库。所以在实际操作的时候我们经常会把他的操作封装起来作为Dao层

Redis单机环境

创建接口

package com.dpb.dao;
/**
* Jedis接口
* @author dengp
*
*/
public interface IJedisClient { String get(String key); String set(String key, String value); String hget(String hkey, String key); long hset(String hkey, String key, String value); long incr(String key); long expire(String key, int second); long ttl(String key); long del(String...key); long hdel(String hkey, String...fields);
}

创建接口实现类

@Component
public class JedisClientImpl implements IJedisClient{ @Resource
private JedisPool jedisPool; @Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.get(key);
jedis.close();
return string;
} @Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String string = jedis.set(key, value);
jedis.close();
return string;
} @Override
public String hget(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.hget(hkey, key);
jedis.close();
return string;
} @Override
public long hset(String hkey, String key, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(hkey, key, value);
jedis.close();
return result;
} @Override
public long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
} @Override
public long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, second);
jedis.close();
return result;
} @Override
public long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
} @Override
public long del(String...keys) {
Jedis jedis = jedisPool.getResource();
Long code = jedis.del(keys);
jedis.close();
return code;
} @Override
public long hdel(String hkey, String...fields) {
Jedis jedis = jedisPool.getResource();
Long code = jedis.hdel(hkey, fields);
jedis.close();
return code;
}
}

测试

注意添加扫描



spring的配置文件和上面的单机Spring的是一样的,测试代码也是一样的

	public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisPool pool = ac.getBean("redisClient",JedisPool.class);
Jedis jedis = pool.getResource();
String type = jedis.set("address", "sz-dao");
System.out.println(type);
jedis.close();
pool.close();
}

Redis集群环境

接口的实现

@Component
public class JedisClusterClientImpl implements JedisClient { @Autowired
private JedisCluster jedisCluster; @Override
public String get(String key) {
return jedisCluster.get(key);
} @Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
} @Override
public String hget(String hkey, String key) {
return jedisCluster.hget(hkey, key);
} @Override
public long hset(String hkey, String key, String value) {
return jedisCluster.hset(hkey, key, value);
} @Override
public long incr(String key) {
return jedisCluster.incr(key);
} @Override
public long expire(String key, int second) {
return jedisCluster.expire(key, second);
} @Override
public long ttl(String key) {
return jedisCluster.ttl(key);
} @Override
public long del(String... key) {
return 0;
} @Override
public long hdel(String hkey, String... fields) {
// TODO Auto-generated method stub
return 0;
} }

其他的配置操作和spring整合Jedis中都是一样的

好了本文介绍到此。下次再见~~

Redis客户端操作之Jedis的更多相关文章

  1. redis客户端--jedis

    一.jedis jedis 是 redis推荐的java客户端.通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作.jedis使用起来比较简单,它的操作方法与redis命令相类 ...

  2. C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表. ...

  3. 【转】C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表.并且会将封装的一些代码贴 ...

  4. Java操作redis客户端Jedis使用

    1.1   jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...

  5. 20190928-02使用Redis客户端Jedis连接Redis,以及用Java代码操作Redis 000 030

    启动redis package com.yujie.jedis; import java.util.HashMap; import java.util.Map; import java.util.Se ...

  6. Redis客户端之Spring整合Jedis,ShardedJedisPool集群配置

    Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...

  7. Redis客户端——Jedis的使用

    本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介.获取Jedis.Jedis直连.Jedis连接池以及二者的对比的选择. Jedis简介 Jedis 是 Redis  ...

  8. spring 集成redis客户端jedis(java)

    spring集成jedis简单实例   jedis是redis的java客户端,spring将redis连接池作为一个bean配置. “redis.clients.jedis.JedisPool”,这 ...

  9. 使用Java客户端对Redis进行操作

    一.背景 上篇文章我们介绍了如何在centos7下面进行安装单机版redis以及redis集群.这篇文章,我们来聊一聊如何使用java客户端来进行操作redis.我们知道redis的java客户端有很 ...

随机推荐

  1. Blueking bk 蓝鲸开发环境搭建

    首先根据文档安装各种东西 http://docs.bk.tencent.com/develop_center/ops/unified.html#installation 完后在在vagrantfile ...

  2. robotframework-databaselibrary安装步骤

    我这里主要介绍离线安装的方式 第一步:下载robotframework-databaselibrary-0.6 包可以去网上找安装包下载,如果实在找不到可以联系我 第二步:下载PyMySQL-0.9. ...

  3. BZOJ3105-新Nim游戏

    Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴 ...

  4. python+pycharm环境搭建

    1.下载python安装包 https://www.python.org/downloads/ 2.下载pycharm安装包. https://www.jetbrains.com/pycharm/do ...

  5. Spring Boot中Web应用的统一异常处理 转载来自翟永超

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...

  6. spark入门

    这一两年Spark技术很火,自己也凑热闹,反复的试验.研究,有痛苦万分也有欣喜若狂,抽空把这些整理成文章共享给大家.这个系列基本上围绕了Spark生态圈进行介绍,从Spark的简介.编译.部署,再到编 ...

  7. 12 week work

    调用一个地图API <html> <head> <meta http-equiv="Content-Type" content="text/ ...

  8. Koa 学习笔记

    开始 就像官网上说的,一切框架都从一个"Hello World"开始,首先我们新建一个 package.json,内容尽量简单: { "name": " ...

  9. DB2日常维护常用命令

    1.检查是否有僵尸进程 ps -emo THREAD | grep -i Z | grep -i 实例名 2.处理死锁  --第一步:查看所有死锁  db2 get snapshot for lock ...

  10. [转]Request Flow for Provisioning Instance in Openstack

      One of the most important use-case in any cloud is provisioning a VM . In this article we shall do ...