前言
给大家的话:这篇文章主要讨论java如何连接redis数据库
今天写的这篇文章之事抛砖引玉,我相信大家还有更好的思想,让我们一起思想交汇,创造更好的一切!
【题外话】我爱王梦!
资料下载
所有本文用到的jar包以及资料我已经全部放到了百度网盘上,各位骚年还有妹子有需要的自己下载。连接如下:
资料具体如何使用呢?只需要解压后,将redis文件夹对应的文件拷贝到你的电脑上,接下来选择对应的版本即可。
之后在cmd中启动redis-server即可。
至于jar包的用法我想大家都是知道的。
思考过程
我希望大家在看过我写的博客之后要知其然,还要知其所以然,所以,我先带大家来捋一捋思考过程。
很明显,我们已经完成了redis服务器的启动,那我们该如何才能连接上服务器呢?
目前的方法只有一种,那即是redis为我们提供了一个简单的客户端,我们现在想用java连接,本质上其实就是实现一个java版本的redis客户端,那如何实现呢?
一个客户端,最核心的构件就是与服务器的连接,我们的连接就是Jedis;但是,如果我们直接new一个出来的话好像不是那么优雅,redis的官方为我们提供了连接池,那连接池会提供我们连接,它怎莫知道我们想要怎样的连接呢?当然,我们需要进行配置,那么和配置相关的类,就派上了用场,当然还有连接池。
代码展示
下面,我将redis的客户端类展示出来,大家按照代码结构对照流程图进行对比!
package com.weimob.redis;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
/**
* 测试redis,当然只是测试了value的存储和删除 <br>
* 尤其记得重要的一点就是切片和非切片的联系和区别
*
* @author fulei.yang
*
*/
public class MyRedis {
private Jedis jedis;
private JedisPool jedisPool;
public MyRedis() {
super();
initPool();
//4:得到连接,可以执行操作
jedis = jedisPool.getResource();
}
/**
* 初始化非切片池
*/
private void initPool() {
//1:得到配置对象
JedisPoolConfig config = new JedisPoolConfig();
//2:开始设置
config.setMaxTotal(20);
config.setMaxIdle(5);
config.setMaxWaitMillis(1000l);
config.setTestOnBorrow(false);
//3:得到连接池
jedisPool = new JedisPool(config, "127.0.0.1", 6379);
}
public void keyOperate() {
System.out.println("======================key==========================");
// 清空数据
System.out.println("清空库中所有数据:" + jedis.flushDB());
// 判断key否存在
System.out.println("判断key999键是否存在:" + jedis.exists("key999"));
System.out.println("新增key001,value001键值对:" + jedis.set("key001", "value001"));
System.out.println("判断key001是否存在:" + sharedJedis.exists("key001"));
// 输出系统中所有的key
System.out.println("新增key002,value002键值对:" + jedis.set("key002", "value002"));
System.out.println("系统中所有键如下:");
Set<String> keys = jedis.keys("*");
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
System.out.println(key);
}
// 删除某个key,若key不存在,则忽略该命令。
System.out.println("系统中删除key002: " + jedis.del("key002"));
System.out.println("判断key002是否存在:" + sharedJedis.exists("key002"));
// 设置 key001的过期时间
System.out.println("设置 key001的过期时间为5秒:" + jedis.expire("key001", 5));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
// 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1
System.out.println("查看key001的剩余生存时间:" + jedis.ttl("key001"));
// 移除某个key的生存时间
System.out.println("移除key001的生存时间:" + jedis.persist("key001"));
System.out.println("查看key001的剩余生存时间:" + jedis.ttl("key001"));
// 查看key所储存的值的类型
System.out.println("查看key所储存的值的类型:" + jedis.type("key001"));
}
}
代码解析
通过上面的代码我们可以很清楚的看到,那就是代码和流程图是基本贴合的,就这样我们基本完成了客户端的构建,接下来的话,要做一些改进的话,就是在效率上做一些优化,当我们建立连接的那一刻,今天的讨论就完成了。
概念讨论-切片和非切片
在百度百科上查到的是这样的:
jedis切片(集群)
非切片(单机)
这样的话,集群方面的东西我还暂时了解不到,so就不多做讨论了。
总结
今天的话我们主要看了一下redis客户端类的编写,其实我们更应该了解其大致流程,因为不断你是在连接那个数据库,你需要的步骤几乎都是一致的,so,骚年,技能get起来!
祝大家猴年猴开森!