一、前言
如果你对redis还不太了解的话可以翻看这篇文章,讲解的非常详细!!!
二、下载Jedis的jar包
1. 什么是Jedis
Jedis是一款java操作redis数据库的工具.
2. 下载步骤
1. 官网下载链接:
Maven Repository: redis.clients » jedis (mvnrepository.com)https://mvnrepository.com/artifact/redis.clients/jedis2. 找一个下载量比较大的(也可以下载最新的试试看)!
3. 点击 jar(540k) 开始下载
4. 如果是Maven项目,可以直接复制代码到pom.xml中更方便。
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
3. 将jar包导入idea项目中
1. 新建一个utils文件夹,然后把jedis的jar包复制进去
2. 然后右键,点击 Add as Lbrary...
三、下载JedisPool的jar包
1. 为什么要使用JedisPool
首先我们如果每次使用缓存都生成一个Jedis对象的话,这样意味着会建立很多socket连接,造成系统资源被不可控调用,甚至会导致奇怪错误的发生。
但是如果使用单例模式,在线程安全模式下适应不了高并发的需求,非线程安全模式又可能会出现与时间相关的错误。
因此,为了避免这些问题,引入了池的概念JedisPool。
JedissPool是一个线程安全的网络连接池,我们可以通过JedisPool创建和管理Jedis实例,这样可以有效的解决以上问题以实现系统的高性能。
2. 下载步骤
1. 点击官网链接下载
Pool – Download Apache Commons Poolhttps://commons.apache.org/proper/commons-pool/download_pool.cgi2. 点击以bin.zip结尾的下载
3. 解压,复制jar包到项目文件夹下。导入方法与jedis一样。
四、测试使用
1.打开redis服务器
2. 编写测试代码
@Test
public void Test(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100); //最大允许连接数
config.setMaxIdle(10); //最大空闲连接数
// 设置Jedis连接池
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis = jedisPool.getResource(); //获取连接
jedis.set("hello","wocao"); // 设置数据
System.out.println(jedis.get("hello")); // 获取数据
jedis.close(); // 关闭资源
}
3. 运行结果
如果可以看见绿色的对勾则证明导入没有问题!!!
4. 如何更方便的使用jedis
1. 先编写一个jedis.properties的文件
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
2. 再写一个JedisUtils的工具包
public class JedisUtils {
private static JedisPool jedisPool;
static {
//创建Properties对象
Properties properties = new Properties();
//关联文件
try {
//读取配置文件
properties.load(JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties"));
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
//初始化JedisPool
jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
3. 编写Jedis连接池测试
@Test
public void TestPool(){
Jedis jedis = JedisUtils.getJedis(); // 使用Utils工具类获取连接
jedis.set("hello","redisPool");
System.out.println(jedis.get("hello"));
jedis.close();
}
4. 运行结果
5. 获取各种数据类型
1. String类型测试
@Test
public void Test1(){
Jedis jedis = new Jedis("localhost",6379); //获取连接,默认空参为localhost 6379
jedis.set("username","zhangsan"); //操作
String username = jedis.get("username"); //获取
System.out.println(username);
jedis.close(); //关闭连接
jedis.setex("activcode",20,"woqiao"); //设置一个20秒以后自动删除的key
}
2. hash数据结构测试
@Test
public void Test2(){
Jedis jedis = new Jedis();
jedis.hset("user","name","lisi");
jedis.hset("user","gender","男");
jedis.hset("user","age","23");
String name = jedis.hget("user", "name");
System.out.println(name);
Map<String, String> user = jedis.hgetAll("user");
System.out.println(user);
jedis.close();
}
3. List数据结构测试
@Test
public void Test3(){
Jedis jedis = new Jedis("localhost",6379);
jedis.lpush("mylist","a","b","c");
jedis.rpush("mylist","a","b","c");
List<String> mylist = jedis.lrange("mylist", 0, -1); //范围获取
System.out.println(mylist); //[c, b, a, a, b, c]
String mylist1 = jedis.lpop("mylist");
System.out.println(mylist1); //c
String mylist2 = jedis.rpop("mylist");
System.out.println(mylist2); //c
jedis.close();
}
4. set数据结构测试
@Test
public void Test4(){
Jedis jedis = new Jedis();
jedis.sadd("myset","apple","banana","cat");
Set<String> myset = jedis.smembers("myset");
System.out.println(myset); //[banana, apple, cat]
jedis.close();
}
5. sortedset数据结构测试
@Test
public void Test5(){
Jedis jedis = new Jedis();
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset); //[亚瑟, 后裔, 孙悟空]
jedis.close();
}
}