添加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. 软件工程个人作业——Agile Software Development读后感

    昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...

  2. redis神器

    redis是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存. redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上. ...

  3. 关于INTRAWEB ISAPI DLL发布

    怎样将Stand Alone App变为ISAPI Dll? 一是将工程文件中的program改成library,二是将uses里的IWInitStandAlone改成IWInitISAPI,没有该文 ...

  4. jQuery基础学习8——层次选择器children()方法

    $('body > div').css("background","#bbffaa"); //和children()方法是等价的,父子关系,和parent ...

  5. InnoDB与MyISAM的区别

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  6. 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)

    今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...

  7. hadoop2.1.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  8. javascript --学习this

    this 在一般的强类型语言中,this指向的是这个对象本身,可在javascript中 this的取值是执行上下文环境的一部分 其实这个this并不是很难立即,只要记住二点就可以了 那就是谁call ...

  9. cocos2dx 3.0 触摸机制

    在cocos2dx 3.0版本号中,废弃了以往2.x版本号的写法,我们先来看一下Layer.h中的一段代码 /* Callback function should not be deprecated, ...

  10. 在WebClient中使用post[发送数据]

    很多时候,我们需要使用C#中的WebClient 来收发数据,WebClient 类提供向 URI 标识的任何本地.Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法 ...