-
r e d i s 是 非 关 系 型 数 据 库 redis是\color{red}{非关系型数据库} redis是非关系型数据库,基于键值对
-
5
种数据类型string 字符串类型
hash 哈希类型
list 列表类型
set 集合类型
sortedset 有序集合类型
-
redis
应用场景- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 聊天室的在线好友列表
- 任务队列。(秒杀、抢购、12306等等) 应用排行榜
- 数据过期处理(可以精确到毫秒
- 分布式集群架构中的session分离
-
string类型的应用
存储: set key value 127.0.0.1:6379> set username zhangsan
获取: get key 127.0.0.1:6379> get username
删除: del key 127.0.0.1:6379> del age
-
hash类型应用
存储: hset key field value 127.0.0.1:6379> hset myhash username lisi 127.0.0.1:6379> hset myhash password 123
获取: hget key field: 获取指定的field对应的值 127.0.0.1:6379> hget myhash username hgetall key:获取所有的field和value 127.0.0.1:6379> hgetall myhash
删除: hdel key field 127.0.0.1:6379> hdel myhash username
-
list列表/队列
添加: 1. lpush key value: 将元素加入列表左表 lpush myList xxxxx 2. rpush key value:将元素加入列表右边 lpush myList xxxxx
获取: lrange key start end :范围获取 127.0.0.1:6379> lrange myList 0 -1
删除: lpop key: 删除列表最左边的元素,并将元素返回 rpop key: 删除列表最右边的元素,并将元素返回
-
set类型
存储:sadd key value 127.0.0.1:6379> sadd myset xxx 127.0.0.1:6379> sadd myset xxx
获取:smembers key:获取set集合中所有元素 127.0.0.1:6379> smembers myset
删除:srem key value:删除set集合中的某个元素 127.0.0.1:6379> srem myset a
-
sortedset类型
有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 1. 存储:zadd key score value 127.0.0.1:6379> zadd mysort 60 zhangsan 127.0.0.1:6379> zadd mysort 50 lisi 127.0.0.1:6379> zadd mysort 80 wangwu 2. 获取:zrange key start end [withscores] 127.0.0.1:6379> zrange mysort 0 -1 127.0.0.1:6379> zrange mysort 0 -1 withscores 3. 删除:zrem key value 127.0.0.1:6379> zrem mysort lisi
-
通用指令
1. keys * : 查询所有的键 2. type key : 获取键对应的value的类型 3. del key:删除指定的key value
-
持久化
RDB
和AOF
-
RDB
-
默认方式,无需配置
-
在一定间隔检查
key
的变化情况,然后写入文件 -
编辑
redis.windwos.conf
文件修改间隔时间,后重启# after 900 sec (15 min) if at least 1 key changed save 900 1 # after 300 sec (5 min) if at least 10 keys changed save 300 10 # after 60 sec if at least 10000 keys changed save 60 10000
-
启动
redis
命令行参数要跟配置文件名
redis-server.exe redis.windows.conf
-
-
AOF
日志记录方式,每一条命令都回更新数据到硬盘-
编辑
redis.windwos.conf
文件appendonly no(关闭aof) --> appendonly yes (开启aof) # appendfsync always : 每一次操作都进行持久化 appendfsync everysec : 每隔一秒进行一次持久化 # appendfsync no : 不进行持久化
-
-
使用jedis.jar
项目github地址https://github.com/majiaoliya/-javaEE/tree/main/javaEE-11-Redis%E5%8C%85%E7%9A%84%E4%BD%BF%E7%94%A8
-
先引入
jedis.jar
到项目里
-
建立
省份.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>省份</title>
<script src="js/jquery-3.3.1.js"></script>
</head>
<body>
省份 : <select name="prov" id="prov">
<option value="0">---请选择----</option>
</select>
<script>
$(function () {
$.get("getProv", function (data) {
alert(data);
$(data).each(function (index, item) {
var ele = "<option value=\"0\">" + item.name + "</option>";
$("#prov").append(ele);
});
}, "json");
});
</script>
</body>
</html>
- 把
mvc
架子搭好
- 写好
jedis工具类
JedisUtil.java
package com.icis.utils;
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 JedisUtil {
public static JedisPoolConfig config = null;
public static JedisPool pool = null;
static {
InputStream in = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties pro = new Properties();
try {
pro.load(in);
config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMinIdle(Integer.parseInt(pro.getProperty("maxIdle")));
Integer port = Integer.parseInt(pro.getProperty("port"));
pool = new JedisPool(config, pro.getProperty("host"), port);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Jedis getJedis() {
Jedis ret = pool.getResource();
return ret;
}
}
ProvServiceImpl.java
package com.icis.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.icis.dao.ProvDao;
import com.icis.dao.impl.ProvDaoImpl;
import com.icis.pojo.Prov;
import com.icis.service.ProvService;
import com.icis.utils.JedisUtil;
import redis.clients.jedis.Jedis;
import java.util.List;
public class ProvServiceImpl implements ProvService {
ProvDao dao = new ProvDaoImpl();
ObjectMapper mp = new ObjectMapper();
static final Jedis JEDIS = JedisUtil.getJedis();
@Override
public List<Prov> getAllProv() {
return dao.getAllProv();
}
/**
* 只有第一次使用的时候去数据库查数据
* 其他都从redis缓存里查询
* @return 返回地理位置信息的json字符串
*/
@Override
public String getAllProvJson() {
String prov_list = JEDIS.get("prov_list");
if(prov_list == null) { //缓存里没有就从数据库读取
List<Prov> list = getAllProv();
try { //第一次读取的话就放到jedis缓存里
prov_list = mp.writeValueAsString(list);
JEDIS.set("prov_list", prov_list);
System.out.println("第一次");
} catch (JsonProcessingException e) {
e.printStackTrace();
}
} else {
System.out.println("第很多次");
}
return prov_list;
}
}