上篇博文讲解了如何通过 命令行 的方式操作redis数据库,本篇博文用来讲述如何通过 java代码 操作redis数据库。
类似于java代码操作mysql数据库要先导入jar包一样,这里也需要导入Jedis(一款java操作redis数据库的工具)的jar包:jedis-2.7.0.jar
commons-pool2-2.3.jar
如何使用Jedis??
Jedis的操作相对于jdbc操作mysql简单许多,只需要三步:
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();
1、Jedis 操作 redis 中的字符串类型 string
public class String_redis {
public static void main(String[] args) {
test2();
}
public static void test2(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 进行操作
jedis.set("name","lqq");
String username = jedis.get("name");
System.out.println(username);
//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
//3. 关闭连接
jedis.close();
}
}
这里面有两点需要注意:
(1)Jedis jedis = new Jedis();//如果使用空参构造,默认值 “localhost”,6379端口
(2)jedis.setex(“activecode”,20,“hehe”); 这个方法可以用来做 激活码七天失效
2、Jedis 操作 redis 中的哈希类型 hash
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class Hash_redis {
public static void main(String[] args) {
test2();
}
public static void test2(){
//1. 获取连接
Jedis jedis = new Jedis();
//2. 操作
// 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","female");
// 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);
// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
// keyset
Set<String> keySet = user.keySet();
for (String key : keySet) {
//获取value
String value = user.get(key);
System.out.println(key + ":" + value);
}
//3. 关闭连接
jedis.close();
}
}
分析:
(1)hgetAll命令/方法 取得整个HASH表的信息,返回一个以KEY为索引VALUE为内容的数组。
(2)hash的结构:
(3)取出map中所以的元素,得先通过 keySet() 返回值类型:Set<k>
返回此映射中包含的键的 Set 视图,再通过 get()
(3) Map集合中提供了get() 获取元素的方法, get()对应一个键取出其对应 的值
(3) Map集合中是没有迭代器 的 ,Map集合取出键值的原理:将map集合转成set集合,再通过迭代器取出
(3) set 具备迭代器,通过迭代方式取出所有的键
(4)entrySet() 返回值类型:Set<Map.Entry<K,V>>
也可以完成上述操作。
取出的是关系,关系中包含key和value,其中Map.Entry<k,V>来表示这种数据类型。即:将map集合中的映射关系存入到set集合中,这个关系的数据类型为:Map.Entry。
(5)对于map集合有点生疏的同学建议去复习一下 Map的学习
3、Jedis 操作 redis 中的 list
import java.util.List;
import redis.clients.jedis.Jedis;
public class List_redis {
public static void main(String[] args) {
test2();
}
public static void test2(){
//1. 获取连接
Jedis jedis = new Jedis();
//2. 操作
// list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存
// list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);
// list 弹出
String element1 = jedis.lpop("mylist");//c
System.out.println(element1);
String element2 = jedis.rpop("mylist");//c
System.out.println(element2);
// list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
//3. 关闭连接
jedis.close();
}
}
4、Jedis 操作 redis 中的 set
package Demo;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class Set_redis {
public static void main(String[] args) {
test2();
}
public static void test2(){
//1. 获取连接
Jedis jedis = new Jedis();
//2. 操作
// set 存储
jedis.sadd("myset","aaa","lq","bbb");
// set 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
//3. 关闭连接
jedis.close();
}
}
5、Jedis 操作 redis 中的 sortedset
import java.util.Set;
import redis.clients.jedis.Jedis;
public class sortedset_redis {
public static void main(String[] args) {
test2();
}
public static void test2(){
//1. 获取连接
Jedis jedis = new Jedis();
//2. 操作
// sortedset 存储
jedis.zadd("mysortedset",3,"aaa");
jedis.zadd("mysortedset",66,"lq");
jedis.zadd("mysortedset",55,"bbb");
// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset);
//3. 关闭连接
jedis.close();
}
}
jedis连接池使用
连接池的基本使用:
//1.创建Jedis连接池对象
JedisPool jedisPool = new JedisPool();
//2.获取连接
Jedis jedis = jedisPool.getResource();
//3. 使用
jedis.set("name","lala");
//4. 关闭 归还到连接池中
jedis.close();
首先给出一个配置文件 jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
然后给出一个工具类 JedisPoolUtils
用途:
(1)加载配置文件,配置连接池的参数
(2)提供获取连接的方法
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
JPool.java
import redis.clients.jedis.Jedis;
import util.JedisPoolUtils;
public class JPool {
public static void main(String[] args) {
test3();
}
public static void test3(){
//通过连接池工具类获取
Jedis jedis = JedisPoolUtils.getJedis();
//3. 使用
jedis.set("hello!","world");
String hello = jedis.get("hello!");
System.out.println(hello);
//4. 关闭 归还到连接池中
jedis.close();;
}
}