添加Maven依赖:

     <dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>

联系Jedis操作redis的常用命令:

TestRedis.java

  import java.util.List;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Transaction; public class TestRedis { String host = "192.168.1.99";
int port = 6379;
Jedis jedis = new Jedis(host, port);
/**
* 单机单链接的方式
* 这种获取连接的方式只在测试的时候使用
* 注意需要关闭redis服务器的防火墙
* @throws Exception
*/
@Test
public void test1() throws Exception {
//获取redis连接
//jedis.set("hehe", "aaaaaa");
String value = jedis.get("hehe");
System.out.println(value);
jedis.close();
} /**
* 单机连接池方式
* 实际工作中建议使用这种方式
* @throws Exception
*/
@Test
public void test2() throws Exception {
//指定连接池的参数
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大空闲连接数
poolConfig.setMaxIdle(10);
//连接池的最大连接数
poolConfig.setMaxTotal(100);
//设置获取连接的最大等待时间
poolConfig.setMaxWaitMillis(1000);
//从连接池中获取连接的时候是否需要校验,这样可以保证取出的连接都是可用的
poolConfig.setTestOnBorrow(true);
//获取jedis连接池
JedisPool jedisPool = new JedisPool(poolConfig , host, port);
//从连接池中取一个链接
Jedis jedis = jedisPool.getResource();
String value = jedis.get("hehe");
System.out.println(value);
//这个close并不是关闭连接,而是把连接还给连接池。
jedis.close();
} /**
* 手工实现incr命令
* @throws Exception
*/
@Test
public void testIncr() throws Exception {
//监控键a的值,如果在事务开启(multi命令执行之间这个键的值被其他命令修改了
//watch并不能取消其他线程的修改那么就会取消事务代码的执行,事务会返回一个null(nil))
jedis.watch("a");
String value = jedis.get("a");
int parseInt = Integer.parseInt(value);
parseInt++;
System.out.println("休息一会....");
Thread.sleep(5000);
Transaction multi = jedis.multi();
multi.set("a", parseInt+"");
List<Object> exec = multi.exec();
if(exec==null){//exec返回的是null说明键的值被其它线程修改了.
System.out.println("值被修改了,事务没有执行。。。。");
testIncr();
}else{
System.out.println("正常执行....");
}
} /**
* 模拟恶意登陆的场景,
* 限制一个IP的访问次数
*/
private boolean testLogin(String ip) {
String value = jedis.get(ip);
if(value==null){
jedis.set(ip, 1+"");
jedis.expire(ip, 60);//如果不加这个设置这个ip只能访问10次
}else{
int parseInt = Integer.parseInt(value);
if(parseInt>10){
System.out.println("访问受限!");
return false;
}
jedis.incr(ip);
} return true;
} /**
* 不使用管道
* 初始化1000条数据
* 消耗时间:5365(老师机器) 122(我的机器)
* @throws Exception
*/
@Test
public void test3() throws Exception {
long start_time = System.currentTimeMillis();
for(int i=0;i<1000;i++){
jedis.set("he"+i, "hello");
}
System.out.println("消耗时间:"+(System.currentTimeMillis()-start_time));
} /**
* 使用管道
* 初始化1000条数据
* 消耗时间:281(老师机器) 27(我的机器)
* @throws Exception
*/
@Test
public void test4() throws Exception {
long start_time = System.currentTimeMillis();
Pipeline pipelined = jedis.pipelined();
for(int i=0;i<1000;i++){
pipelined.set("ha"+i, "hello");
} pipelined.sync();//执行管道中的命令
System.out.println("消耗时间:"+(System.currentTimeMillis()-start_time));
}
}

一般通过一个工具类来从redis连接池中获得redis连接.

RedisUtil.java

 import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; /**
* 静态工具类
* @author Administrator
*
*/
public class RedisUtils { private static JedisPool jedisPool = null; /**
* 从连接池中获取一个redis链接
* 如果两个线程,第一个线程先进来还没有new出来,第二个线程进入if了,这样就造
* 线程的安全性问题.
* @return
*/
public static synchronized Jedis getJedis(){
if(jedisPool==null){//第一次初始化的时候是null,第一次出事后之后就不再执行
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大空闲连接数
poolConfig.setMaxIdle(10);
//连接池中最大连接数
poolConfig.setMaxTotal(100);
//在获取链接的时候设置的超市时间
poolConfig.setMaxWaitMillis(1000);
//表示在向连接池中创建连接的时候会对链接进行测试,保证连接池中的链接都是可用的。
poolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(poolConfig, "192.168.1.170", 6379);
}
Jedis jedis = jedisPool.getResource();
return jedis;
} /**
* 把redis链接返回连接池
*/
public static void returnJedis(Jedis jedis){
jedisPool.returnResourceObject(jedis);
}
}

通过Jedis来操作Redis集群.

ClusterTest.java

 import java.util.HashSet;
import java.util.Set; import org.junit.Test; import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig; public class ClusterTest { @Test
public void test() throws Exception{
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大空闲连接数
poolConfig.setMaxIdle(10);
//连接池中最大连接数
poolConfig.setMaxTotal(100);
//在获取链接的时候设置的超市时间
poolConfig.setMaxWaitMillis(1000);
//表示在向连接池中创建连接的时候会对链接进行测试,保证连接池中的链接都是可用的。
poolConfig.setTestOnBorrow(true);
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.0.172", 7000));
nodes.add(new HostAndPort("192.168.0.172", 7001));
nodes.add(new HostAndPort("192.168.0.172", 7002));
nodes.add(new HostAndPort("192.168.0.172", 7003));
nodes.add(new HostAndPort("192.168.0.172", 7004));
nodes.add(new HostAndPort("192.168.0.172", 7005)); JedisCluster jedisCluster = new JedisCluster(nodes, poolConfig);
jedisCluster.set("a", "1");
String value = jedisCluster.get("a");
System.out.println(value);
}
}

Jedis操作Redis数据库的更多相关文章

  1. 使用Jedis操作Redis数据库

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

  2. 外部服务器使用jedis操作redis数据库

    使用maven获取jedis的包,我本来想去找jedis的jar包的,但是没找到. (maven)     <dependency> <groupId>redis.client ...

  3. 四、Jedis操作Redis

    前言:  原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis. 在这里要使用jedis操作red ...

  4. Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术

    3. redis数据类型[重点] redis 使用的是键值对保存数据.(map) key:全部都是字符串 value:有五种数据类型 Key名:自定义,key名不要过长,否则影响使用效率 Key名不要 ...

  5. Jedis操作Redis技巧详解

    对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...

  6. Redis入门和Java利用jedis操作redis

    Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...

  7. Java通过jedis操作redis缓存

    package com.wodexiangce.util; import java.util.Set; import redis.clients.jedis.Jedis; /** * redis工具类 ...

  8. Jedis操作Redis

    Jedis操作Redis的常用封装方法 @Resource(name="jedispool") private JedisPool pool=null; /** * 设置缓存对象过 ...

  9. 操作redis数据库 & 操作Excel & 开发接口

    操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...

随机推荐

  1. HDU 5821 Ball (贪心)

    Ball 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5821 Description ZZX has a sequence of boxes nu ...

  2. 【C++专题】static_cast, dynamic_cast, const_cast探讨

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  3. codeforces 651B Beautiful Paintings

    B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. 咏南DATASNAP中间件提供免费使用了

    咏南DATASNAP中间件提供免费使用了. 百度网盘分享: 链接: http://pan.baidu.com/s/1c06Ivp2 密码: dhhm

  5. 咏南中间件支持DELPHI低版本开发的两层程序平稳升级到三层

    提供DELPHI中间件及中间件集群,有意请联系. N年前,我们用DELPHI低版本开发的两层程序(比如工厂ERP系统),现在仍然在企业广泛地得到使用,但老系统有些跟不上企业的发展需要了.主要表现在:虽 ...

  6. js即时监听文本内容

    <script type="text/javascript"> //其他浏览器 function OnInput (event) { alert ("文本内容 ...

  7. TypeScript学习笔记(七):模块

    JavaScript中的模块 在学习TypeScript的模块之前我们先看看在JavaScript中的模块是如何实现的. 模块的好处 首先我们要了解使用模块的好处都有什么? 模块化.可重用: 封装变量 ...

  8. MFC中常用的内容

    在程序中更改静态文本内容. GetDlgItem(IDC_STATIC)->SetWindowText("欢迎"); 不用UpdateData(false); 如果提示con ...

  9. HibernateDaoSupport的使用

    1.HibernateDaoSupport是有spring提供的一个hibernate模版工具类,或不多说,直接上代码 接口 IGenericDao.java package org.hibernat ...

  10. Thinkphp框架----微信公众测试号开发

    最开始的一个步骤.注册一个微信公众测试号.URL:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login; 接口配置的信息,对新手 ...