1、Jedis
java操作redis数据库的工具,类似于jdbc
(1)快速入门
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();
- 出现的问题
- redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
- 主要是因为redis设置了密码,需要:jedis.auth(“123456”);
- redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
(2)Jedis操作redis各种数据结构
<1>Jedis操作:字符串
- 命令操作:字符串
● set(key , value):设置键值对
● get(key):获取值
● setex(key , time , value):设置time 秒后自动失效的 键值对:key - value - Jedis操作:字符串
Jedis jedis=new Jedis("127.0.0.1",6378);
jedis.set("username","123");
System.out.println(jedis.get("username"));
jedis.setex("activecode",20,"haha"); //20s后失效的键值对:activecode-haha
System.out.println(jedis.get("haha"));
<2>Jedis操作:列表list
- 命令操作:列表list
● 存储
○ lpush key value:将元素加到列表左侧
○ rpush key value:将元素加到列表右侧
● 获取
○ Irange key start end :范围获取
● 删除:
○ lpop key :删除列表最左边的元素,并将元素返回
○ rpop key:删除元素最右边的元素,并将元素返回 - Jedis操作:列表list
Jedis jedis=new Jedis("127.0.0.1",6378);
jedis.lpush("mylist","val1","val2"); //从左边存
jedis.rpush("mylist","val3","val4"); //从右边存
List<String> mylist = jedis.lrange("mylist", 0, -1);///-1代表所有
System.out.println(mylist); //[val2, val1, val3, val4]
//mylist的弹出
jedis.lpop("mylist"); //弹出左边的值
jedis.rpop("mylist"); //弹出右边的值
List<String> mylist1 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist1); //[val1, val3]
<3>Jedis操作:哈希map
- 命令操作:哈希map
● 存储:hset key field value
● 获取:hget key field: 获取指定的field对应的值
○ hgetall key:获取所有的field和value
● 删除: hdel key field - Jedis操作:哈希map
Jedis jedis=new Jedis("127.0.0.1",6378);
jedis.hset("user","username","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","男");
String name = jedis.hget("user", "username");
System.out.println(name); //lisi
Map<String, String> user = jedis.hgetAll("user");
System.out.println(user); //{gender=男, age=23, username=lisi}
<4>Jedis操作:set
- 命令操作:set
● 存储:sadd key value
● 获取:smembers key:获取set集合的所有元素
● 删除:srem key value:删除set集合的某个元素 - Jedis操作:set
Jedis jedis=new Jedis("127.0.0.1",6378);
jedis.sadd("myset","val1","val2");
jedis.sadd("myset","val1");
Set<String> myset = jedis.smembers("myset");
System.out.println(myset); //[val2, val1]
<5>Jedis操作:sortedset
- 命令操作:sortedset
● 存储:zadd key score value
● 获取:zrange key start end [withscores]
● 删除:zrem key value - Jedis操作:sortedset
Jedis jedis=new Jedis("127.0.0.1",6378);
jedis.zadd("mysort",25,"val1");
jedis.zadd("mysort",22,"val2");
jedis.zadd("mysort",24,"val3");
Set<String> mysort = jedis.zrange("mysort", 0, -1); //按照double的分数进行排序
System.out.println(mysort); // [val2, val3, val1]
2、Jedis连接池
(1)快速入门
- 创建JedisPool连接池对象(可以设置配置对象)
- 调用方法 getResource()方法获取Jedis连接
- 使用jedis
- 归还连接
//0.创建配置对象
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1.创建Jedis连接池对象
JedisPool jedisPool=new JedisPool(config,"127.0.0.1",6378);
//2.创建Jedis连接
Jedis jedis = jedisPool.getResource();
//3.使用Jedis
jedis.set("key1","val1");
System.out.println(jedis.get("key1"));
//4.归还连接到连接池
jedis.close();
3、JedisUtil工具类
- 将jedis-all.properties配置文件放在resource目录下
#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#redis服务器的IP
redis.ip=127.0.0.1
#redis服务器的Port
redis.port=6378
/**
* JedisPool工具类:
* 加载配置文件,获取连接池参数
* 提供获取连接的方法
*/
public class JedisPoolUtil {
private static JedisPool jedisPool;
static {
//1.读取配置文件
InputStream is = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis-all.properties");
//2.创建Properties对象
Properties pro=new Properties();
try {
//3.Properties对象关联文件
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//4.获取配置文件内容
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(new Integer(pro.getProperty("redis.pool.maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("redis.pool.maxIdle")));
String port = pro.getProperty("redis.port");
String ip = pro.getProperty("redis.ip");
//5.创建jedisPool
jedisPool=new JedisPool(config,ip,Integer.parseInt(port));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}