文章目录

  • 第一章 概述
    • 1.1 非关系型数据库的优势
    • 1.2 edis支持的键值数据类型
    • 1.3 redis的应用场景
  • 第二章 redis的数据结构
  • 第三章 Java客户端 Jedis
    • 3.1 快速入门
    • 3.2 操作字符串结构的数据
    • 3.3 操作hashmap数据结构
    • 3.4 操作list数据结构
    • 3.5 操作set数据结构
    • 3.6 操作sortedset数据结构
    • 3.7 jedis连接池对象
    • 3.8 详细配置参数
  • 第四章 jedisUtils工具类包装
  • 第五章 案例
    • 5.1 需求分析
    • 5.2 代码
  • 第六章 redis持久化机制
    • 6.1 RDB
    • 6.2 AOF

https://baijiahao.baidu.com/s?id=1660009541007805174&wfr=spider&for=pc

第一章 概述

1.1 非关系型数据库的优势

  • 非关系型数据库,提高了访问数据得速度
  • 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
  • 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  • 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

1.2 edis支持的键值数据类型

  • 字符串类型 string
  • 哈希类型 hash
  • 列表类型 list
  • 集合类型 set
  • 有序集合类型 sortedset

1.3 redis的应用场景

  • 缓存(数据查询、短连接、新闻内容、商品内容等等)
  • 任务队列。(秒杀、抢购、12306等等)
  • 聊天室的在线好友列表
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒
  • 分布式集群架构中的session分离

第二章 redis的数据结构

键值对方式,其中key都是字符串,value有5种不同的数据结构
value的数据结构

  • 字符串类型 string

    • set username zhangsan
    • get username
  • 哈希类型 hash : map格式

    • hset myhash username lisi
    • hset myhash password 123
    • hget myhash username
    • hgetall myhash
  • 列表类型 list : linkedlist格式。支持重复元素

    • lpush key value:将元素加入列表左表
    • rpush key value:将元素加入列表右边
    • lrange key start end :范围获取
    • lrange myList 0 -1:索引0到-1
    • lpop key: 删除列表最左边的元素,并将元素返回
    • rpop key: 删除列表最右边的元素,并将元素返回
  • 集合类型 set : 不允许重复元素

    • 存储:sadd key value
    • 获取:smembers key:获取set集合中所有元素
    • 删除:srem key value:删除set集合中的某个元素
      • srem myset a
  • 有序集合类型 sortedset:不允许重复元素,且元素有顺序

    • 不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    • 存储:zadd key score value
    • 获取:zrange key start end [withscores]
    • 删除:zrem key value
  • 通用命令

      1. keys * : 查询所有的键
      1. type key : 获取键对应的value的类型
      1. del key:删除指定的key value

第三章 Java客户端 Jedis

Jedis: 一款java操作redis数据库的工具.

3.1 快速入门

public void test1(){//1.获取连接Jedis jedis=new Jedis();//2.操作jedis.set("username","lisi");//3.关闭连接jedis.close();
}

3.2 操作字符串结构的数据

//可以使用setex()方法存储可以指定过期时间的 key value
//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
jedis.setex("activecode",20,"hehe");

3.3 操作hashmap数据结构

  /*** hashmap 数据结构的操作*/@Testpublic void test3(){//1.获取连接Jedis jedis=new Jedis();//如果使用空参构造,默认值 "localhost",6379端口jedis.hset("user","name","lisi");jedis.hset("user","age","16");jedis.hset("user","gender","男");String name = jedis.hget("user", "name");String gender = jedis.hget("user", "gender");
//        System.out.println(name+":"+gender);//获取hashmap所有数据Map<String, String> map = jedis.hgetAll("user");Set<String> keySet = map.keySet();for (String key:keySet){String value = map.get(key);System.out.println(key+":"+value);}//3.关闭连接jedis.close();}

3.4 操作list数据结构

/*** list 数据结构操作*/@Testpublic void test4(){//1.获取连接Jedis jedis=new Jedis();//2.操作jedis.lpush("list","a","b","c");jedis.rpush("list","a","b","c");//        String value = jedis.lpop("mylist");//弹出一个List<String> mylist = jedis.lrange("list", 0, -1);System.out.println("--------------------");//删除jedis.del("mylist");//3.关闭连接jedis.close();}

3.5 操作set数据结构

@Test
/*** set 数据结构*/
public void test5(){//1.获取连接Jedis jedis=new Jedis();//2.操作jedis.sadd("myset","java","php","c++");Set<String> myset = jedis.smembers("myset");System.out.println(myset);//[c++, java, php]//3.关闭连接jedis.close();
}

3.6 操作sortedset数据结构

@Test
/*** sortedset 数据结构*/
public void test6(){//1.获取连接Jedis jedis=new Jedis();//2.操作jedis.zadd("sortset",3,"亚瑟");jedis.zadd("sortset",12,"孙悟空");jedis.zadd("sortset",12,"孙悟");Set<String> sortset = jedis.zrange("sortset", 0, -1);System.out.println(sortset);//[亚瑟, 孙悟, 孙悟空]//3.关闭连接jedis.close();
}

3.7 jedis连接池对象

3.3.1 快速入门,连接池的建立与获取jedis对象

@Test
public void test7(){//1.获取连接JedisPool jedisPool=new JedisPool();Jedis jedis = jedisPool.getResource();//2.操作jedis.set("msg","hello");//3.关闭连接jedis.close();
}

3.8 详细配置参数

#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true  对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=xxxxxx
#redis服务器的Port
redis1.port=6379   

第四章 jedisUtils工具类包装

package code.Jedis.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;/*** JedisPool工具类* 加载配置文件:配置连接池的参数* 提供获取连接的方法*/
public class JedisPoolUtils {private static JedisPool jedisPool;
static {try {//读取配置文件InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");//创建properties对象,关联文件Properties pro = new Properties();pro.load(is);//获取数据。设置到jedisPoolConfig中JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));config.setMaxIdle(Integer.parseInt(pro.getProperty("maxTotal")));String host = pro.getProperty("host");int port = Integer.parseInt(pro.getProperty("port"));//初始化jedisPooljedisPool = new JedisPool(config, host, port);} catch (IOException e) {e.printStackTrace();}}/*** 获取 jedis 连接* @return*/public static Jedis getJedis(){return jedisPool.getResource();
}}

第五章 案例

5.1 需求分析

案例需求:
1. 提供index.html页面,页面中有一个省份 下拉列表
2. 当 页面加载完成后 发送ajax请求,加载所有省份

* 注意:使用redis缓存一些不经常发生变化的数据。* 数据库的数据一旦发生改变,则需要更新缓存。* 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入* 在service对应的增删改方法中,将redis数据删除。

5.2 代码

客户端

<!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) {//获取selectvar $province=$("#province");//遍历json数组$(data).each(function (index,val) {//创建<option>var option=" <option name=" +this.id+ ">"+ this.name+"  </option>";//append追加$province.append(option);});});});</script>
</head>
<body>
<select name="" id="province"><option value=""> ----- 请选择省份 ----</option></select>
</body>
</html>

服务端

public String findAllJson() {//1.先从redis缓存中查询数据String jsonlist = null;//1.1获取redis客户端连接Jedis jedis = JedisPoolUtils.getJedis();//2.通过jedis对象获取键为province的数据,判断是否存在String province = jedis.get("province");if (province==null||province.length()==0){//2.redis中没有数据//2.1转向数据库查询System.out.println("redis中不存在这样的数据,转向数据库.....");List<Province> list = dao.findAll();//2.2 将数据库中查询到的结果存入redis----->使用json键值对格式存储和获取ObjectMapper mapper=new ObjectMapper();try {//2.3 将数据库查询结果转换成json数据jsonlist = mapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}//2.4 在redis缓存中存储json数据jedis.set("province",jsonlist);jedis.close();}else{//3. redis中已经存在数据System.out.println("redis已存在,从redis中查询获取.....");jedis.get("province");}return jsonlist;
}

第六章 redis持久化机制

6.1 RDB

  • 默认方式,不需要进行配置,默认就使用这种机制
  • 在一定的间隔时间中,检测key的变化情况,然后持久化数据
  • 编辑redis.windwos.conf文件
    1. 编辑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

    2. 重新启动redis服务器,并指定配置文件名称
      D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf

6.2 AOF

  • 编辑redis.windwos.conf文件
  • appendonly no(关闭aof) --> appendonly yes (开启aof)
  • #appendfsync always : 每一次操作都进行持久化
  • appendfsync everysec : 每隔一秒进行一次持久化
  • #appendfsync no : 不进行持久化

【Redis】基本使用与jedis入门相关推荐

  1. jedis入门_Jedis入门

    jedis入门 嗨,这些天我开始研究Redis. 我听说过很多,所以我决定尝试一下. Redis在其网站上定义为" 开源高级键值存储". 它通常被称为数据结构服务器,因为键可以包含 ...

  2. centos部署Redis和Java开发(Jedis)

    centos部署Redis和Java开发(Jedis) 1.部署Redis 1)下载:http://redis.io/download    2)解压编译: $ tar xzf redis-3.2.3 ...

  3. 【Redis】7.使用jedis操作redis数据库

    jedis jedis是java程序操纵Redis的工具. Jedis是Redis官方推荐的Java链接工具 使用前导入,下面的测试建议也导入测试的包 <!-- 导入jedis的包--> ...

  4. (转)java redis使用之利用jedis实现redis消息队列

    应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象 ...

  5. redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法...

    解决spring-data-redis操作redis集群报"Jedis does not support password protected Redis Cluster configura ...

  6. Redis的常用JavaAPI(Jedis)实现

    一.  pom依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> ...

  7. Redis的Java客户端——Jedis

    目录 一.基本配置 1.1 引入依赖 1.2  建立连接 1.3 测试String类型 1.4 释放资源 1.5 运行结果 二.Jedis连接池 一.基本配置 Jedis的官方地址:GitHub - ...

  8. Redis主从复制详解(入门教程)

    文章目录 概念 环境配置 一主二从 配置 测试 复制原理 哨兵模式 概述 测试 哨兵模式全部配置 以下是Redis相关笔记总结,方便自己以后复习,同时也希望对大家有所帮助. 内容 地址链接 Redis ...

  9. Redis: pipeline基本原理以及Jedis和Redisson的实现示例

    1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令. 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O).执行命令(内存)和返回结 ...

最新文章

  1. c++构建工具之cmake使用小结
  2. java注解@remote,Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端
  3. 系统架构师笔记(1)
  4. 树分治树链剖分相关题目讨论
  5. python异常处理try判断整数_Python 异常处理 try、except、raise
  6. 编程语言_如何正确地学习编程语言
  7. python中id函数的用法_用id函数做几个测试
  8. 计组之总线:4、总线标准
  9. dedeCMS会员注册功能,如何开启或关闭?
  10. 怎么把竖列中的数相加python_关于python中pandas.DataFrame对行与列求和及添加新行与列示例代码...
  11. Linux设备驱动02:Linux内核模块
  12. python开发网络程序教程_python3编写C/S网络程序实例教程
  13. Know your weapons Ⅱ
  14. IIS7的HTTP 500.19错误
  15.  Windows socket之IO完成端口(IOCP)模型开发
  16. 【微信小程序|组件库】一款清新且简洁的卡片样式
  17. 9.11 myl模拟赛
  18. 开关电源spice仿真与实用设计_十年电源研发工程师的10条开关电源设计实用经验...
  19. 自损八百!美光停止供货华为
  20. 智能ABC输入法超酷技巧

热门文章

  1. android 各个版本特性
  2. Unity中的AI算法和实现2-有限状态机FSM(上)
  3. 我最喜欢的两首反战诗
  4. IOS - 某段子APP分析
  5. 【有奖征文】51CTO男/女子图鉴 哪一面才是真的你
  6. 1155: 5202 二进制转化为十六进制
  7. 关于OBS无法获取酷狗音乐窗口问题
  8. No.4 clojure加载.clj文件
  9. python学习环境安装
  10. CSS大全_最全的常用css代码