【Redis】基本使用与jedis入门
文章目录
- 第一章 概述
- 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
通用命令
- keys * : 查询所有的键
- type key : 获取键对应的value的类型
- 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文件
编辑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服务器,并指定配置文件名称
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入门相关推荐
- jedis入门_Jedis入门
jedis入门 嗨,这些天我开始研究Redis. 我听说过很多,所以我决定尝试一下. Redis在其网站上定义为" 开源高级键值存储". 它通常被称为数据结构服务器,因为键可以包含 ...
- centos部署Redis和Java开发(Jedis)
centos部署Redis和Java开发(Jedis) 1.部署Redis 1)下载:http://redis.io/download 2)解压编译: $ tar xzf redis-3.2.3 ...
- 【Redis】7.使用jedis操作redis数据库
jedis jedis是java程序操纵Redis的工具. Jedis是Redis官方推荐的Java链接工具 使用前导入,下面的测试建议也导入测试的包 <!-- 导入jedis的包--> ...
- (转)java redis使用之利用jedis实现redis消息队列
应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象 ...
- redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法...
解决spring-data-redis操作redis集群报"Jedis does not support password protected Redis Cluster configura ...
- Redis的常用JavaAPI(Jedis)实现
一. pom依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> ...
- Redis的Java客户端——Jedis
目录 一.基本配置 1.1 引入依赖 1.2 建立连接 1.3 测试String类型 1.4 释放资源 1.5 运行结果 二.Jedis连接池 一.基本配置 Jedis的官方地址:GitHub - ...
- Redis主从复制详解(入门教程)
文章目录 概念 环境配置 一主二从 配置 测试 复制原理 哨兵模式 概述 测试 哨兵模式全部配置 以下是Redis相关笔记总结,方便自己以后复习,同时也希望对大家有所帮助. 内容 地址链接 Redis ...
- Redis: pipeline基本原理以及Jedis和Redisson的实现示例
1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令. 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O).执行命令(内存)和返回结 ...
最新文章
- c++构建工具之cmake使用小结
- java注解@remote,Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端
- 系统架构师笔记(1)
- 树分治树链剖分相关题目讨论
- python异常处理try判断整数_Python 异常处理 try、except、raise
- 编程语言_如何正确地学习编程语言
- python中id函数的用法_用id函数做几个测试
- 计组之总线:4、总线标准
- dedeCMS会员注册功能,如何开启或关闭?
- 怎么把竖列中的数相加python_关于python中pandas.DataFrame对行与列求和及添加新行与列示例代码...
- Linux设备驱动02:Linux内核模块
- python开发网络程序教程_python3编写C/S网络程序实例教程
- Know your weapons Ⅱ
- IIS7的HTTP 500.19错误
- Windows socket之IO完成端口(IOCP)模型开发
- 【微信小程序|组件库】一款清新且简洁的卡片样式
- 9.11 myl模拟赛
- 开关电源spice仿真与实用设计_十年电源研发工程师的10条开关电源设计实用经验...
- 自损八百!美光停止供货华为
- 智能ABC输入法超酷技巧