日期:2021年12月14日
出处:黑马程序员JavaWeb全套教程,Java Web从基础到项目实战(IDEA版)
正文
redis
redis是一款高性能的NOSQL系列的非关系型数据库
需要下载
redis的数据结构与命令
命令比较简单,这里挑选几个重要常用的命令
- 列表类型:可以添加一个元素到列表的头部(左边)或者尾部(右边)
-
- lpush key value: 将元素加入列表左表
- rpush key value:将元素加入列表右边
-
- lrange key start end :范围获取
- pop key: 删除列表最左边的元素,并将元素返回
-
- rpop key: 删除列表最右边的元素,并将元素返回
- 集合类型 set
-
- sadd key value:存储
-
- smembers key:获取set集合中所有元素
- srem key value:删除set集合中的某个元素
- 有序集合类型 sortedset
-
- zrange key start end:获取集合指定区间元素
- 通用命令
-
- keys *:查询所有的键
- type key:获取key对应value的类型
-
- del key:删除指定的key value
持久化
redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据就会丢失,但是我们可以通过修改配置文件redis.windows.conf将redis内存中的数据持久化保存到硬盘的文件中
方式一:
RDB:默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔时间中,检测key的变化情况,然后持久化数据
方式二:
AOF:日志记录的方式,可以记录每一条命令的操作。
可以每一次命令操作后,持久化数据
jedis
Java操作redis数据库的工具
需要导包
jedis的方法和redis的命令是一模一样的,相对于是比较简单的,下面我只对jedis中扩充的方法进行演示
package JedisTest;
// TODO: 2021/12/14 jedis的测试类
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.Map;
import java.util.Set;
public class test {
@Test
public void test1(){
//String类型的操作
// 1.获取连接
// Jedis jedis = new Jedis("localhost",6379);
Jedis jedis = new Jedis();//空参默认就是("localhost",6379)
// 2.操作
// setex()方法可以指定存储时间的key value
jedis.setex("activecode",10,"hehe");//将activecode:hehe键值对存入redis,并在10秒后自动删除该键值对
// 3.关闭连接
jedis.close();
}
@Test
public void test2(){
//hash类型的操作
// 1.获取连接
// Jedis jedis = new Jedis("localhost",6379);
Jedis jedis = new Jedis();//空参默认就是("localhost",6379)
// 2.操作
// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
Set<String> keySet = user.keySet();
for (String key : keySet) {
String value = user.get(key);
System.out.println(key+":"+value);
}
// 3.关闭连接
jedis.close();
}
@Test
public void test3(){
//String类型的操作
// 1.获取连接
// Jedis jedis = new Jedis("localhost",6379);
Jedis jedis = new Jedis();//空参默认就是("localhost",6379)
// 2.操作
// 3.关闭连接
jedis.close();
}
}
jedis连接池:JedisPool
package JedisTest;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class jedis连接池 {
@Test
public void test1(){
// 0.创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
//设置连接池的配置参数
config.setMaxTotal(50);//最大允许的连接数
config.setMaxIdle(10);//最大空闲连接数
// 1.创建Jedis连接池对象
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
// 2.获取连接
Jedis jedis = jedisPool.getResource();
// 3.操作
jedis.set("hh","aa");
// 4.关闭 归还到连接池中
jedis.close();
}
}
jedis连接池工具类
package JedisTest;
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;
//JedisPool工具类
//1.加载配置文件
//2.配置连接池的参数
//3.提供获取连接的方法
public class jedis连接池工具类 {
private static JedisPool jedisPool;
static {
//读取配置文件(使用类加载器)
InputStream is = JedisPool.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();
}
}
注意:
所有的操作是基于redis数据库启用之后进行的。
拓展
win10右键或者shift+右键没有“打开命令窗口”可以在文件路径直接输入cmd,之后就会直接在当前文件路径下打开命令窗口了
总结
今天学习了新的数据库类型非关系型数据库,他和关系型数据库不是对立的,而是相辅相成为了给用户带来更好的体验,它用于存储一些不进场改变的数据。简单学习了redis数据库,重点是redis的命令有一些细节还是需要注意的,比如列表类型添加元素之后的顺序等,之后学习了jedis连接池,和jdbc连接池一样是为了提高复用率和响应速度的,这部分内容整个都是重点,jedis连接池工具类是今天的难点,jedis连接池工具类的书写流程还是不熟练,还需要练习。