2023/7/18 · 非关系型数据库Redis
1·Redis简介
Redis 是一个开源的 key-value 数据库,属于NoSQL数据库,按照键值对的结构对数据进行存储。
- string类型的 设置set 获取get 删除del
本机ip:6379> set 1 dingzhen
OK //添加成功
本机ip:6379> get 1
"dingzhen" //获取值
本机ip:6379> del 1
(integer) 1 //删除返回影响记录数量
本机ip:6379>
- hash类型 设置hset 获取hget 删除hdel
本机ip:6379> hset 2 a dingzhen //设置键、属性名、属性
(integer) 1
本机ip:6379> hget 2 a
"dingzhen"
本机ip:6379> hdel 2 a
(integer) 1
本机ip:6379>
- list类型 左插lpush 右插rpush 范围获取lrange 左删lpop 右删rpop
本机ip:6379> lpush 3 a b c
(integer) 3
本机ip:6379> lrange 3 0 -1 //从0开始,-1表示末尾
1) "c"
2) "b"
3) "a"
本机ip:6379> rpush 3 d e f
(integer) 6
本机ip:6379> lrange 3 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
6) "f"
本机ip:6379> lpop 3
"c"
本机ip:6379> lrange 3 0 -1
1) "b"
2) "a"
3) "d"
4) "e"
5) "f"
本机ip:6379>
- set类型(无序) 添加sadd 全部获得smembers 删除指定元素srem
本机ip:6379> sadd 4 x y z
(integer) 3
本机ip:6379> smembers 4
1) "y"
2) "z"
3) "x"
本机ip:6379> srem 4 y
(integer) 1
本机ip:6379> smembers 4
1) "z"
2) "x"
本机ip:6379>
2·Java连接Redis
要在Java中连接redis,需要在web项目中导入jedis的jar包。
然后直接把jedis对象实例化,构造器参数填上本机ip和redis的端口号
public class Test {
public static void main(String[] args) {
//1.创建Jedis连接 Java+Redis
Jedis jedis = new Jedis("本机ip", 6379); //6739为redis默认端口号
jedis.set("dingzhen", "理塘丁真");
System.out.println(jedis.get("dingzhen"));
//控制台:
//理塘丁真
}
}
对象转json存入redis,这里用到了阿里巴巴的fastjson包,用于json串的快速转换。
//对象转json存入redis
Student stu1 = new Student(1, "丁真", 20, "男");
String jsonStu1 = JSON.toJSONString(stu1); //转换为json字符串
jedis.set("stu1", jsonStu1);
String result = jedis.get("stu1"); //获取json字符串
Student newStu1 = JSON.parseObject(result, Student.class); //将json串转换为对象,参数为json串和该对象类型的Class实例
System.out.println(newStu1.getSname()); //获取对象的属性
//丁真
对象数组转json存入redis,和对象转json一样,只不过用到了不同的转换方法。
//对象数组转json存入redis
List<Student> list = new ArrayList<Student>();
Student stu1 = new Student(1, "丁真", 20, "男");
Student stu2 = new Student(2, "王源", 20, "男");
list.add(stu1);
list.add(stu2);
String jsonStr = JSON.toJSONString(list);
jedis.set("list", jsonStr);
String result = jedis.get("list");
List<Student> newList = JSON.parseArray(result, Student.class);
System.out.println(newList.get(0).getSname());
System.out.println(newList.get(1).getSname());
//丁真
//王源
3·Jedis用于缓存的示例
简单创建了一个分层开发的web项目,web包和上面一样。
这是servlet中的代码。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
StudentService ss = new StudentServiceImpl();
Jedis jedis = new Jedis("本机ip", 6379);
List<Student> list = null;
if (jedis.get("list") == null || "".equals(jedis.get("list"))) {
list = ss.getAll();
jedis.set("list", JSON.toJSONString(list));
System.out.println("从数据库");
} else {
String str = jedis.get("list");
list = JSON.parseArray(str, Student.class);
System.out.println("从缓存");
}
req.getSession().setAttribute("list", list);
resp.sendRedirect("index.jsp");
}