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 agehash类型应用
存储: 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 usernamelist列表/队列
添加: 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 asortedset类型
有序集合类型 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.confAOF 日志记录方式,每一条命令都回更新数据到硬盘
编辑redis.windwos.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof) # appendfsync always : 每一次操作都进行持久化 appendfsync everysec : 每隔一秒进行一次持久化 # appendfsync no : 不进行持久化项目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; } }