一、Redis
Reids是一款使用C语言开发的高性的基于键值对的菲关系型数据库。
关系型和非关系型数据库图解
1、Redis的数据类型(5种)
1、String
添加
set name dabao
查询
get name
删除
del name
2、hash(Map集合)
添加
hset user name xiaobao
hset user age 20
hset user1 name zhangsan
hset user1 age 23
查询
hget user name //返回xiaobao
hgetall user //name xiaobao
age 20
删除
hdel user name //把name=xiaobao键值对删除
3、List
添加
lpush mylist apple
lpush mylist orange
rpush mylist balana
查询
lrange mylist 0 -1 // orange apple balana
删除
lpop mylist //将orange从队列中返回并删除
rpop mylist //将balana从队列中返回并删除
4、Set
添加
sadd myset a
sadd myset b
sadd myset a
查询
smembers myset //a b
删除
srem myset a //将a从集合中移除
5、SortedSet
添加
zadd mysortedset 10 a
zadd mysortedset 30 b
zadd mysortedset 20 c
查询
zrange mysortedset 0 -1 // a c b
zrange mysortedset 0 -1 withscores; // 10 a
20 c
30 b
删除
zrem mysortedset a //将a值移除
2、通用命令
keys * //查询redis中的所有键
type key //获取指定键所对应值的类型(string hash list set sortedset)
del key //将key及所对应的值从redis中删除
3、持久化方案
redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
RDB
默认方式,不需要进行配置,默认就使用这种机制
在指定时间内,扫描键的变化,如果达到指定数量就持久化。
*after 900 sec (15 min) if at least 1 key changed
AOF
AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。
appendfsync always :每隔一秒持久化一次
appendfsync everysec :每操作一次持久化一次
二、Jedis的使用
1、使用步骤
1、下载jedis的jar包jedis-2.7.0.jar、commons-pool2-2.3.jar
2、在项目中引入jar包
3、创建Jedis对象,并调用其方法完成相关操作
2、使用Jedis操作String
public void testString(){
Jedis jedis = new Jedis("127.0.0.1",6379);
//保存数据
jedis.set("name","dabao");
//获取数据
String name = jedis.get("name");
//设置保存时间
jedis.expire("name",60*60);
}
3、使用Jedis操作Hash
@Test
public void testHash(){
Jedis jedis = new Jedis("127.0.0.1",6379);
//保存数据
jedis.hset("user","name","dabao");
jedis.hset("user","age","20");
//获取数据
String name = jedis.hget("user", "name"); //获取到dabao
Map<String, String> user = jedis.hgetAll("user");//获取到map
//删除dabao
jedis.hdel("user","name")
}
4、使用Jedis操作list
@Test
public void testList(){
Jedis jedis = new Jedis("127.0.0.1",6379);
//保存数据
jedis.lpush("mylist","a","b","c");
jedis.lpush("mylist","d");
//获取数据
jedis.lrange("mylist",0,-1); //d c b a
//删除dabao
String v = jedis.lpop("mylist");//将d从队列中删除,并返回给变量v
String v1 = jedis.rpop("mylist")
}
4、使用Jedis操作set
@Test
public void testSet(){
Jedis jedis = new Jedis("127.0.0.1",6379);
//保存数据
jedis.sadd("myset","a","b","a","c");
//获取数据
Set<String> set = jedis.smembers("myset");// a b c(无序)
//删除dabao
jedis.srem("myset","a"); //将a删除
}
5、使用Jedis操作SortedSet
@Test
public void testSortedSet(){
Jedis jedis = new Jedis("127.0.0.1",6379);
//保存数据
jedis.zadd("mysortedset",10,"apple");
jedis.zadd("mysortedset",30,"pear");
jedis.zadd("mysortedset",20,"orange");
//获取数据
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1); //apple orange pear
Set<Tuple> mysortedset1 = jedis.zrangeWithScores("mysortedset", 0, -1);
for(Tuple t: mysortedset1){
System.out.println(t.getScore()+":"+t.getElement());
}
//删除apple
jedis.zrem("mysortedset","apple")
}
三、Jedis连接池
1、基本使用步骤
JedisPoolConfig config= new JedisPoolConfig(); //用于给jedis连接池设置参数
config.setMaxTotal(50);
config.setMaxIdle(10)
JedisPool pool = new JedisPool(config,"127.0.0.1",6379); //创建连接池
Jedis jedis= pool.getResources(); //从连接池获取连接
2、Jedis连接池帮助类
jedis.properties配置文件
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
JedisPoolUtils.java
package cn.itcast.utils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.InputStream;
import java.util.Properties;
public class JedisPoolUtils {
private static JedisPool pool;
static{
try {
//加载jedis.properties到Properties对象中
InputStream resourceAsStream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
System.out.println(resourceAsStream);
Properties properties = new Properties();
properties.load(resourceAsStream);
//读取配置文件内容
String _port = properties.getProperty("port");
String _maxTotal = properties.getProperty("maxTotal");
String _maxIdle = properties.getProperty("maxIdle");
//类型转换
String host = properties.getProperty("host");
int port = Integer.parseInt(_port);
int maxTotal = Integer.parseInt(_maxTotal);
int maxIdle = Integer.parseInt(_maxIdle);
//创建Jedis连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
//创建JedisPool连接池
pool = new JedisPool(config, host, port);
}catch(Exception ex){
ex.printStackTrace();
}
}
public static Jedis getJedis(){
Jedis resource = pool.getResource();
return resource;
}
}
注意:
*使用redis缓存一些不经常发生变化的数据。
* 数据库的数据一旦发生改变,则需要更新缓存。
* 数据库的表执行 增删改的相关操作,需要将redis缓存数据清除,再次存入
* 在service对应的增删改方法中,将redis数据删除。
案例:
案例需求:(需要访问redis)
1. 提供index.html页面,页面中有一个省份 下拉列表
2. 当 页面加载完成后 发送ajax请求,加载所有省份
案例代码:
链接:https://pan.baidu.com/s/18u3rpejE7M1rEL-_GUF1_A
提取码:8lmr