1.redis存儲是:key value格式的數據,其中key都是字符串,value有5種不同的數據結構
value的數據結構:
1.字符串類型:string
2.哈希類型 hash :map格式
3.列表類型 list:linkedlist格式。支持重復元素
4.集合類型 set:不允許重復元素
5.有序集合類型 sortset:不允許重復元素,且元素有順序
2.字符串類型 string
1.存儲:set key value
2.獲取:get key
3.刪除:del key
3.哈希類型 hash:
1.存儲:hset key field value
2.獲取:hget key field
3.刪除:hdel key field
jeids的操作
string數據結構操作
//1.獲取連接
Jedis jedis = new Jedis("localhost", 6379);
//2.操
//存儲
jedis.set("username","zhangsan");
//獲取
String username = jedis.get("username");
System.out.println(username);
//可以使用setx方法存儲指定國旗時間的key value
jedis.setex("active",20,"hehe");//將active hehe鍵值對存入redis,並且20秒后自動刪除鍵值對
//3.關閉連接
jedis.close();
hash數據結構操作
//1.獲取連接
Jedis jedis = new Jedis("localhost", 6379);
//2.操作
//存儲
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","male");
//獲取
String name = jedis.hget("user", "name");
System.out.println(name);
//獲取hash的所有的map的數據
Map<String, String> user = jedis.hgetAll("user");
Set<String> set = user.keySet();
for (String key : set) {
String value = user.get(key);
System.out.println(key +":"+value);
}
//3.關閉連接
jedis.close();
list數據結構操作
//1.獲取連接
Jedis jedis = new Jedis("localhost", 6379);
//2.操作
//存儲
jedis.lpush("mylist","a","b","c");//從左邊存 cba
jedis.rpush("mylist","a","b","c");//從右邊存 abc
//獲取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);
//list彈出
String element = jedis.lpop("mylist");
System.out.println(element);
String element1 = jedis.rpop("mylist");
System.out.println(element1);
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
//3.關閉連接
jedis.close();
set和sortedset數據結構操作
//1.獲取連接
Jedis jedis = new Jedis("localhost", 6379);
//2.操作
//存儲 數字的作用是輸出按從小到大排列
jedis.zadd("mysorted",3,"亞瑟");
jedis.zadd("mysorted",30,"后羿");
jedis.zadd("mysorted",25,"孫悟空");
//獲取
Set<String> mysorted = jedis.zrange("mysorted", 0, -1);
System.out.println(mysorted);
//3.關閉連接
jedis.close();
jedis連接池:
使用:1.創建jedispool連接池對象
2.調用方法getResource()方法獲取jedis連接
//創建配置對象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);//最大活動對象
config.setMaxIdle(10);//最大保持的連接數
//1.創建對象
JedisPool jedisPool = new JedisPool();
//2.獲取連接
Jedis jedis = jedisPool.getResource();
//3.使用
jedis.set("heheh","hahah");
//3.關閉連接
jedis.close();
案例:
1.提供一個頁面,是一個下拉框,其中是省份
2.頁面加載完成,發送ajax請求,加載省份
優化:使用redis緩存一些不經常發生變化的數據
Dao部分
dao接口類
package cn.itcast.dao;
import cn.itcast.domain.Province;
import java.util.List;
public interface ProvinceDao {
public List<Province> findAll();
}
dao實現類
package cn.itcast.dao.impl;
import cn.itcast.dao.ProvinceDao;
import cn.itcast.domain.Province;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class ProvinceDaoImpl implements ProvinceDao {
//1.聲明成員變量
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<Province> findAll() {
//2.定義sql
String sql = "select * from province";
//3.執行sql
List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
return list;
}
}
Service部分
service接口類
package cn.itcast.service;
import cn.itcast.domain.Province;
import java.util.List;
public interface ProvinceService {
public List<Province> findAll();
public String findAllJson();
}
service實現類
package cn.itcast.service.impl;
import cn.itcast.dao.ProvinceDao;
import cn.itcast.dao.impl.ProvinceDaoImpl;
import cn.itcast.domain.Province;
import cn.itcast.service.ProvinceService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.omg.CORBA.PRIVATE_MEMBER;
import redis.clients.jedis.Jedis;
import java.util.List;
public class ProvinceServiceImpl implements ProvinceService {
//聲明dao
private ProvinceDao dao = new ProvinceDaoImpl();
@Override
public List<Province> findAll() {
return dao.findAll();
}
@Override
public String findAllJson() {
//先從redis查詢數據
//1.獲取連接
Jedis jedis = new Jedis("localhost", 6379);
//2.操作
//獲取
String province_json = jedis.get("province");
//判斷province_json是否是null
if (province_json == null || province_json.length() == 0){
//redis沒數據,從數據庫查詢
System.out.println("redis沒有數據,查詢數據庫。。。。");
//數據查詢
List<Province> ps = dao.findAll();
//將list序列化為json
ObjectMapper mapper = new ObjectMapper();
try {
province_json = mapper.writeValueAsString(ps);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//將json數據存入數據庫中
jedis.set("province",province_json);
//歸還連接
jedis.close();
}else{
System.out.println("redis有數據,查詢緩存。。。。");
}
return province_json;
}
}
Servlet部分
package cn.itcast.web.servlet;
import cn.itcast.domain.Province;
import cn.itcast.service.ProvinceService;
import cn.itcast.service.impl.ProvinceServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// //調用service
// ProvinceService service = new ProvinceServiceImpl();
// List<Province> list = service.findAll();
// //序列化list為json
// ObjectMapper mapper = new ObjectMapper();
// String json = mapper.writeValueAsString(list);
//調用service查詢
ProvinceServiceImpl service = new ProvinceServiceImpl();
String json = service.findAllJson();
System.out.println(json);
//響應結果
response.setContentType("application/json;charset=gbk");
response.getWriter().write(json);
}
}
Html部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.js"></script>
<script>
$(function () {
//發送ajax請求
$.get("provinceServlet",{},function (data) {
//獲取select
var province = $("#province");
//遍歷json
$(data).each(function () {
//創建option標簽,append追加option
var option = "<option name='"+this.id+"'>"+this.name+"</option>";
province.append(option)
})
})
})
</script>
</head>
<body>
<select name="" id="province">
<option value="">--請選擇省份--</option>
</select>
</body>
</html>