添加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. SSH与SSL

    1. SSL SSH 即Secure Shell,它主要由三部分组成: 第一部分:连接协议 [SSH-CONNECT] 将多个加密隧道分成逻辑通道.它运行在用户认证协议上.它提供了交互式登录话路.远程 ...

  2. Struts2零碎点整理

    1. 关于 Struts2 请求的扩展名问题 1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用的一些常量 2). struts ...

  3. Spring入门(6)-使用注解装配

    Spring入门(6)-使用注解装配 本文介绍如何使用注解装配. 0. 目录 使用Autowired 可选的自动装配 使用Qualifier选择 1. 使用Autowired package com. ...

  4. Spring Data JPA教程, 第七部分: Pagination(未翻译)

    The previous part of my Spring Data JPA tutorialdescribed how you can sort query results with Spring ...

  5. 苹果iOS锁屏制作

    下面我们开始. 一.锁屏界面 可以观察到,iphone的锁屏界面在时间和解锁部分有着透明强高光风格的背景,高光部分有非常明显的界限,边缘部分1像素的高光也是非常醒目的,整体感觉整个表面非常光滑,如同玻 ...

  6. Java学习笔记(二):String

    String 在Java中String是作为引用对象存在的一种数据类型,用来保存字符串. 实例化和赋值 //直接声明 String s1 = "Hello world!"; //通 ...

  7. Codeforces Round #219 (Div. 1)(完全)

    戳我看题目 A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 <= aj 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足 ...

  8. Elasticsearch和mysql数据同步(elasticsearch-jdbc)

    1.介绍 对mysql.oracle等数据库数据进行同步到ES有三种做法:一个是通过elasticsearch提供的API进行增删改查,一个就是通过中间件进行数据全量.增量的数据同步,另一个是通过收集 ...

  9. linux下为php添加mongodb扩展

    基于本博客yum安装的lamp环境,phpize 位于 /usr/bin,php-config 位于/usr/bin,php.ini 位于/etc/ 1.首先从http://pecl.php.net/ ...

  10. PostgreSQL的 initdb 源代码分析之二十四

    继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...