redis-享学课堂
一.redis特性
1.速度快
2.键值对的数据结构
3.简单稳定
4.持久化
5.主从复制
6.高可用和分布式转移
二.redis为什么速度快?
1.redis虽然安装在磁盘上,但是数据存在内存中
2.单线程
2.与操作系统语言有关,redis是c语言实现,和操作系统语言很近
https://www.jianshu.com/p/8f181aae44a9
因为,为windows等操作系统最初只提供了一种语言的开发接口——那就 C语言。关键是,既然操作系统不直接支持其它语言……那其它语言就只好倒过来去支持操作系统——所谓既然没办法让山走向穆罕默德,但穆罕默德可以走向山。而c++,c,pascal,java,python等等语言,虽然在走的方式上有所不同,但都要走向操作系统这座山,既然操作系统这座山的近乎唯一的路是C语言——所有开发语言就只好放下身段都提供了对C的支持
三.什么是jedis
Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
@Autowiredprivate RedisTemplate<Object,Object> redisTemplate;public void del(String key){redisTemplate.delete(projectName+key);}
四.linux命令
1.& 在后台运行 java -jar test.jar &
2. ./redis-cli 客户端打开 相当于在windows上双击这个exe
3.客户端命令操作 设置键位xkey 值为xvalue
set xkey xvalue
五.使用场景
1.视频中得播放次数 redis用命令+1 inscr key
2.登陆
六.可执行文件
除了红框的别的都没用过
七.如何做到持久化
数据往内存中存一份,也会以文件或者日志得方式往磁盘中存一份
八.为什么不能kill -9
数据不能持久化,杀死线程时,如果文件正在往磁盘里边写,那没来得及写的数据会消失
但是可以通过shutdown命令 ,会输出db saved on disk(数据已经保存到磁盘)
九.java调用redis的过程
把指令转换成协议报文,resp
jedis------tcp----socket
十.单线程的缺陷
如果一个命令执行的慢,会造成其他命令阻塞
十一.value的五种类型
redis命令一般操作什么类型就以这种类型的首字母开头
1.string 命令 set key value
2.hash 命令 hset 或者hmset----可以存储表
把表的主键作为key(这不是固定格式 只要能标识唯一值就好 如hset taobao:order:user:002 num 44这种也可以)
hmset user:001 age 19 name zhangsan
表名:主键值 字段名 字段值 字段名 字段值 。。。。。
获取命令 hgetalll
hgetall user:001
表名:主键值
3.set
4.zset zset叫做有序集合,而set是无序的
题外话:数据库中order by是很影响数据库效率的
5.list
十二.redis中set的使用场景
https://blog.csdn.net/a7442358/article/details/102621269
Sinter(交集) 命令:redis中set常用的操作命令
十三:对redis设计的优化
key越短越好,占内存少
十四.redis客户端友好
说他友好是因为他有提示
linux下 (后边的虚的都是提示)
windows下 (后边的key start stop也都是提示 从哪开始从哪结束)
十五:LUA
1.lua使用场景----redis存储过程
命令是eval
可参考文章 https://zhuanlan.zhihu.com/p/77484377
2.LUA脚本存在的意义
redis是弱事务:有时能回滚,有时不能回滚
而lua脚本是原子性的
十六:countdownlatch发令枪
模拟并发,先wait,直到latch减到(countDown)到0,所有线程一起start
十七:redis慢查询
1.如果一个指令消耗时间过长,redis就会认为这是一个慢查询
2.慢查询时间在配置文件中配置 以微秒为单位 下边这就是10毫秒
或者连接redis-cli客户端之后执行命令
set slowlog-log-slower 1000(重启失效)
3.慢查询记录的最大条数
超过这个数量 前边的指令会被挤出去
4.查看有多少个慢查询
slowlog get
十八:把mysql表导入redis
mysql -uusername -ppassword stress –default-character-set=utf8 –skip-column-names–raw < order.sql | redis-cli –pipe
1.指令解释
skip-column-names:跳过列名 只保存数据 不保存列名
| 管道符号(意思是将该符号左边的运算结果提交给右边的命令处理,这里是先通过MySQL导出数据,然后用redis-cli导入到Redis)
–raw < order.sql 表示将order.sql的sql语句内容粘贴到mysql里执行
-u 用户名
-p 密码
stress 数据库名 或者用-d指定数据库名 -dstress
2.order.sql的内容
SELECT CONCAT("*8\n",'$',LENGTH(redis_cmd),'\n',redis_cmd,'\n','$',LENGTH(redis_key),'\n',redis_key,'\n','$',LENGTH(hkey1),'\n',hkey1,'\n','$',LENGTH(hval1),'\n',hval1,'\n','$',LENGTH(hkey2),'\n',hkey2,'\n','$',LENGTH(hval2),'\n',hval2,'\n','$',LENGTH(hkey3),'\n',hkey3,'\n','$',LENGTH(hval3),'\n',hval3
)FROM(SELECT 'HMSET' AS redis_cmd,concat_ws(':','person', id) AS redis_key,'id' AS hkey1, id AS hval1,'name' AS hkey2, name AS hval2,'age' AS hkey3, age AS hval3From person
)AS t
3.执行位置和正确输出
十九:java对redis批量操作
1.pipeline 管道
原理:把指令拼一起,发送一次请求就好,减少网络传输时间
2.redistemplate操作pipeline
https://blog.csdn.net/xiaoliu598906167/article/details/82218525
List<Long> List = redisTemplate.executePipelined(new RedisCallback<Long>() {@Nullable@Overridepublic Long doInRedis(RedisConnection connection) throws DataAccessException {connection.openPipeline();for (int i = 0; i < 1000000; i++) {String key = "123" + i;connection.zCount(key.getBytes(), 0,Integer.MAX_VALUE);}return null;}});
connection.openPipeline()可以调用,也可以不调用,
但是connection.closePipeline()不能调用,调用了拿不到返回值。
因为调用的时候会直接将结果返回,同时也不会对代码进行反序列化。
3.没使用pipeline和使用pipeline对比
但是pipeline不是事务,只是组成命令块一起发过去然后单线程执行了
就像你执行一个sql脚本就算一条执行错了,前几条sql也不会回滚一样
4.pipeline与原生批量命令 (hmset等)区别
4.1原生命令是原子性
4.2pipeline可以把多种命令组装
二十:RDB持久化
1.以.rdb结尾的文件存储到磁盘
2.持久化文件路径设置 redis.conf中的dir
3. ./ ../ / 的区别
4.持久化好处----恢复数据
根据redis.conf中配置的dir路径,把.rdb文件放到这个路径下重启redis
5. 默认bgsave+rdb
因为save只管保存,不管别的 保存时会阻塞redis的读写
bgsave单开出一个进程去保存
6.默认快照频率
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
二十一:AOF持久化
RDB与AOF区别
https://www.cnblogs.com/AndyAo/p/8135980.html
1.RDB是文件形式,定时执行
2.AOF是记录日志
3.可以配置每秒写一次
4.RDB和AOF可以同时存在
5.AOF恢复数据方式也是把文件放到dir指定得目录下,重启redis
二十二:看懂配置文件的最快方式
直接粘贴到百度翻译上
二十三:redis分布式
1.根据什么分区取值 ?
根据key值得hash计算,得出结果在哪个分区
2.配置集群方法
nodes-6379.conf文件是建好目录之后启动自动生成得
2.1创建集群
https://www.cnblogs.com/ivictor/p/9768010.html
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381
127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
第一行是主节点 第二行是从节点
几个主节点之间原本是没有联系的,通过这条命令建立起联系
用的是ruby工具
3.举例如图
1.进入集群在6379设置age 节点不变 因为age根据计算分给了6379这个节点
2.在6379设置name 跑到了6380节点 因为name根据计算分给了6380这个节点
3.在6380节点设置lison,跑到了6381节点,因为lison根据计算分给了6381节点
4.缺点
4.1批量原子操作,如mset,当key在不同分区时,不支持
4.2只能使用数据库0,其余15个全都用不到
5.当一主多从,如何建立集群
--replicas 2 一主两从
replicas和k8s有几个节点的单词一样
k8s
第一行还是主节点
6479,6579----6379
6480,6580----6380
6481,6581----6381
二十四:多主多从
https://blog.csdn.net/ssf1987/article/details/96193533
所以现在知道三种模式
1.一主两从三哨兵 2.多主多从没哨兵 3.多主多从有哨兵
前两种是支持的 最后一种需要自己研究 第一种是连接三个哨兵节点 第二种连接所有主从节点
redis-享学课堂相关推荐
- 2022还在为怎样去提升自己Android技术而发愁吗?享学课堂是个不错的选择
前言 当你遇到难题,你会怎么去解决它?上网搜还是请教朋友来解答,如果没法得到合理的解决方法,那是不是就会放弃了.同样如此,想要提升自己Android的技术,有人会说可以自学,那只是对于某些人来说的,自 ...
- python课堂实例_享学课堂带你了解并读懂Python列表中的6种操作实例
原标题:享学课堂带你了解并读懂Python列表中的6种操作实例 今天为大家来介绍一下很多人在享学课堂上学习Python时,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector ...
- 中高端Android开发人才进,享学课堂忠实陪伴,让学习成为一种享受
今天为大家推荐的是享学课堂最新出品的Android安卓移动互联网架构开发课程,包含音视频.Kotlin.Jetpack.Flutter等技术讲解与源码解析,在理论讲解的过程中穿插实战项目,每个知识点都 ...
- python内建函数有哪些_享学课堂浅谈Python序列内建函数都有哪些
python的内建函数和库函数的区别是什么?人在得不到的时候,什么都可以不介意.得到之后,什么都有点介意. python.什么是内建函数? python.什么是内建函数?新手小白自学python.不懂 ...
- 全心全意的服务,让转行的我能够成功斩获自己心仪的offer——享学课堂
我是一名享学课堂的一员,我在这里告诉你关于涉足科技领域你需要知道的一切.在这里我将分享我如何参加享学课堂并在 3 个月内成功成为Android开发工程师的秘密. 作为最近放弃职业成为一名Android ...
- 2021-07-16(Kotlin学习笔记 -->享学课堂vip课程)
Kotlin 学习笔记 购买了享学课堂的androidVip课程,工作一直很忙没有时间学习,最近抽时间学习一下,做一下学习笔记 fun main() {/* 定义没问题,调用不行 */var meth ...
- 【享学课堂学习python的感受】
本人今年38岁了,目前在一家500强私企工作,事业逐渐稳定,业余时间总想学点什么才不至于让时间浪费掉,为自己做个技能储备,说不定还能赚点外快,何乐而不为.有一次无意中看到了享学课堂的python开发学 ...
- 享学课堂python基础学习day15之文件操作
我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,废话不多说,文件操作里 ...
- 享学课堂python基础学习day16之类和对象
我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,今天分享类和对象学习了 ...
- 深入剖析原理!享学课堂java架构师课程
为什么要公开这些面试题? 原因一:身边从事 Java 开发的人员越来越多,我的表弟表妹们,朋友的表弟表妹们,朋友的朋友的表弟表妹们,每次问我要相同的面试复习材料,已经让我疲于应付,索性整理出来,直接发 ...
最新文章
- C语言复习2_运算符
- 成功解决TypeError: 'float' object cannot be interpreted as an integer
- curPos和tgtPos
- mysql 重装之后_mysql重装之后 复制data
- Linux学习一周初体验
- C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
- 从阿姆斯特丹建设智能交通能得到什么经验?
- Python新闻网站项目-8.Django前端Web部署
- Python核心编程总结(一、基础概念与语法)
- LoadRunner11破解方法
- 最重要的经济先行指标—PMI
- RFID固定资产管理系统全生命周期管理办公资产
- 开学季好物怎么选,学生党必备的几款好物分享
- ESP32配置mqtt arduino
- LA4043 KM算法
- 机器学习——决策树与随机森林
- 最全的Android单元测试教程
- 技术新领导人张小龙:一些成功不能复制
- 家装灯线走线图_家装灯线怎么布线
- 先进PID控制Matlab仿真第4版-pdf课本+仿真程序
热门文章
- 在MySQL中 函数的主要目的是什么_mysql数据库函数作用是什么意思
- 二十四节气(历法)_The 24 Solar Terms
- keep 虚拟路线修改器_二次元出圈搞综艺,杨颖、虞书欣、小鬼打造二次元虚拟偶像...
- IDE硬盘与SATA的表示
- 2008年8月5号,晴,今天天气开始变热了。业精于勤,荒于嬉。—— 韩 愈《进学解》
- 1970 matla 时间_Matlab中时间戳转换为日期的函数
- Nacos 与其他注册中心对比
- 微信会员卡开发之微信公众平台的基本配置
- Android开发秘籍 第2版
- keithley 2100 软件|keithley2400测试软件NS-SourceMeter