添加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. 【转】Nginx系列(三)--管理进程、多工作进程设计

    原博文出于:http://blog.csdn.net/liutengteng130/article/details/46700999  感谢! Nginx由一个master进程和多个worker进程组 ...

  2. crontab 定时任务格式

    如下内容节选自<Linux Crontab 定时任务 命令详解> 用crontab -e 添加要执行的命令 添加的命令必须以如下格式: * * * * * /command path 前五 ...

  3. rop框架签名功能控制

    平台级控制: 通过<rop:annotation-driven/>的 sign-enable 属性即可开启或关闭服务平台签名验证功能:<rop:annotation-driven s ...

  4. POJ 1860 Currency Exchange (SPFA松弛)

    题目链接:http://poj.org/problem?id=1860 题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元.问你最后经过任意转换可不可能有升值.下面给你货币u和货币v,r1是u ...

  5. HDU 4438 Hunters (数学,概率计算)

    题意:猎人A和B要进行一场比赛.现在有两个猎物老虎和狼,打死老虎可以得X分,打死狼可以得Y分.现在有两种情况: (1)如果A与B的预定目标不同,那么他们都将猎到预定的目标. (2)如果A与B的预定目标 ...

  6. java tools: jstat

    JavaScript is not supported by your browser. JavaScript support is required for full functionality o ...

  7. 求一列的和,awk和perl哪个快?

    下午和群里的朋友争论了一下,有关awk和perl处理文本的速度,自己一直比较推崇perl,对awk知之甚少,结果就想当然的觉得perl快,结果一番争吵后,觉得还是实验一下靠谱,(其实是想证明一下per ...

  8. 剑指OFFER之重建二叉树(九度OJ1385)

    题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...

  9. ECSHOP数据表结构完整仔细说明教程

    From:http://www.ecshop119.com/ecshopjc-868.html s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id medi ...

  10. iPhone Push消息全攻略.1

    要做一个iPhone Push消息的需求,从简单test的开始. 1.先添加一个app ID 2.点击Edit来配置push服务. 3.生成两个证书,一个用于开发,一个用于发布. 4.按下图操作创建一 ...