Jedis操作Redis数据库
添加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数据库的更多相关文章
- 使用Jedis操作Redis数据库
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有Jedis.Redisson ...
- 外部服务器使用jedis操作redis数据库
使用maven获取jedis的包,我本来想去找jedis的jar包的,但是没找到. (maven) <dependency> <groupId>redis.client ...
- 四、Jedis操作Redis
前言: 原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis. 在这里要使用jedis操作red ...
- Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术
3. redis数据类型[重点] redis 使用的是键值对保存数据.(map) key:全部都是字符串 value:有五种数据类型 Key名:自定义,key名不要过长,否则影响使用效率 Key名不要 ...
- Jedis操作Redis技巧详解
对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...
- Redis入门和Java利用jedis操作redis
Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...
- Java通过jedis操作redis缓存
package com.wodexiangce.util; import java.util.Set; import redis.clients.jedis.Jedis; /** * redis工具类 ...
- Jedis操作Redis
Jedis操作Redis的常用封装方法 @Resource(name="jedispool") private JedisPool pool=null; /** * 设置缓存对象过 ...
- 操作redis数据库 & 操作Excel & 开发接口
操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...
随机推荐
- HDU1028Ignatius and the Princess III(母函数)
http://acm.hdu.edu.cn/showproblem.php?pid=1028 母函数: 例1:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? 如何解决这 ...
- CodeForces 589I Lottery (暴力,水题)
题意:给定 n 和 k,然后是 n 个数,表示1-k的一个值,问你修改最少的数,使得所有的1-k的数目都等于n/k. 析:水题,只要用每个数减去n/k,然后取模,加起来除以2,就ok了. 代码如下: ...
- AfxGetMainWnd()函数用法
CWnd* AfxGetMainWnd( ); 使用AfxGetMainWnd函数获取MFC程序中的主框架类指针是一个常用作法. 就是获得应用程序主窗口的指针,AfxGetMainWnd()-> ...
- Node.js和mybatis分别实现mysql中like变量模糊查询
<!-- mybatis --> <where> <if test="varName != '' and varName != null" > ...
- Tomcat7中配置Oracle 11g数据库DBCP连接池
将 ojdbc6.jar tomcat-jdbc-7.0.37.jar 拷贝到工程的WEB-INF\lib 下面 一.在Tomcat的配置文件Tomca ...
- linux 查看当前路径命令:pwd
查看当前路径命令:pwd pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为: # pwd /home/samlee ...
- HTML输出 二 控制行背景颜色
$Infors = Get-Content ports01.txt$Temp_PortStatustxt = "C:\Windows\Temp\PortStatustxt.txt" ...
- 【转】The Zen of Python
http://www.python.org/dev/peps/pep-0020/ Beautiful is better than ugly. Explicit is better than impl ...
- SQL Server 数据导入Mysql详细教程
- Java模拟登陆【转载】
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...