一.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-享学课堂相关推荐

  1. 2022还在为怎样去提升自己Android技术而发愁吗?享学课堂是个不错的选择

    前言 当你遇到难题,你会怎么去解决它?上网搜还是请教朋友来解答,如果没法得到合理的解决方法,那是不是就会放弃了.同样如此,想要提升自己Android的技术,有人会说可以自学,那只是对于某些人来说的,自 ...

  2. python课堂实例_享学课堂带你了解并读懂Python列表中的6种操作实例

    原标题:享学课堂带你了解并读懂Python列表中的6种操作实例 今天为大家来介绍一下很多人在享学课堂上学习Python时,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector ...

  3. 中高端Android开发人才进,享学课堂忠实陪伴,让学习成为一种享受

    今天为大家推荐的是享学课堂最新出品的Android安卓移动互联网架构开发课程,包含音视频.Kotlin.Jetpack.Flutter等技术讲解与源码解析,在理论讲解的过程中穿插实战项目,每个知识点都 ...

  4. python内建函数有哪些_享学课堂浅谈Python序列内建函数都有哪些

    python的内建函数和库函数的区别是什么?人在得不到的时候,什么都可以不介意.得到之后,什么都有点介意. python.什么是内建函数? python.什么是内建函数?新手小白自学python.不懂 ...

  5. 全心全意的服务,让转行的我能够成功斩获自己心仪的offer——享学课堂

    我是一名享学课堂的一员,我在这里告诉你关于涉足科技领域你需要知道的一切.在这里我将分享我如何参加享学课堂并在 3 个月内成功成为Android开发工程师的秘密. 作为最近放弃职业成为一名Android ...

  6. 2021-07-16(Kotlin学习笔记 -->享学课堂vip课程)

    Kotlin 学习笔记 购买了享学课堂的androidVip课程,工作一直很忙没有时间学习,最近抽时间学习一下,做一下学习笔记 fun main() {/* 定义没问题,调用不行 */var meth ...

  7. 【享学课堂学习python的感受】

    本人今年38岁了,目前在一家500强私企工作,事业逐渐稳定,业余时间总想学点什么才不至于让时间浪费掉,为自己做个技能储备,说不定还能赚点外快,何乐而不为.有一次无意中看到了享学课堂的python开发学 ...

  8. 享学课堂python基础学习day15之文件操作

    我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,废话不多说,文件操作里 ...

  9. 享学课堂python基础学习day16之类和对象

    我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,今天分享类和对象学习了 ...

  10. 深入剖析原理!享学课堂java架构师课程

    为什么要公开这些面试题? 原因一:身边从事 Java 开发的人员越来越多,我的表弟表妹们,朋友的表弟表妹们,朋友的朋友的表弟表妹们,每次问我要相同的面试复习材料,已经让我疲于应付,索性整理出来,直接发 ...

最新文章

  1. C语言复习2_运算符
  2. 成功解决TypeError: 'float' object cannot be interpreted as an integer
  3. curPos和tgtPos
  4. mysql 重装之后_mysql重装之后 复制data
  5. Linux学习一周初体验
  6. C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
  7. 从阿姆斯特丹建设智能交通能得到什么经验?
  8. Python新闻网站项目-8.Django前端Web部署
  9. Python核心编程总结(一、基础概念与语法)
  10. LoadRunner11破解方法
  11. 最重要的经济先行指标—PMI
  12. RFID固定资产管理系统全生命周期管理办公资产
  13. 开学季好物怎么选,学生党必备的几款好物分享
  14. ESP32配置mqtt arduino
  15. LA4043 KM算法
  16. 机器学习——决策树与随机森林
  17. 最全的Android单元测试教程
  18. 技术新领导人张小龙:一些成功不能复制
  19. 家装灯线走线图_家装灯线怎么布线
  20. 先进PID控制Matlab仿真第4版-pdf课本+仿真程序

热门文章

  1. 在MySQL中 函数的主要目的是什么_mysql数据库函数作用是什么意思
  2. 二十四节气(历法)_The 24 Solar Terms
  3. keep 虚拟路线修改器_二次元出圈搞综艺,杨颖、虞书欣、小鬼打造二次元虚拟偶像...
  4. IDE硬盘与SATA的表示
  5. 2008年8月5号,晴,今天天气开始变热了。业精于勤,荒于嬉。—— 韩 愈《进学解》
  6. 1970 matla 时间_Matlab中时间戳转换为日期的函数
  7. Nacos 与其他注册中心对比
  8. 微信会员卡开发之微信公众平台的基本配置
  9. Android开发秘籍 第2版
  10. keithley 2100 软件|keithley2400测试软件NS-SourceMeter