尚硅谷Redis学习笔记

一、前言

五大基本数据类型
string
Listo
Seto
Hasho
Zset
三种特殊数据类型
geo
hyperloglogo
bitmap

二、Redis是什么?

Redis(=Remote Dictionary Server ),即远程字典服务
Redis是一个key-value 存储系统
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

三、Redis能干嘛

1、内存存储、持久化,内存中是断电即失、所以说持久化很重要(( rdb、aof )
2、效率高,可以用于高速缓存
3、发布订阅系统
4、地图信息分析
5、计时器、计数器(浏览量!)
6、.….

四、Redis使用

4.1、Windows下安装

下载地址:https://github.com/tporadowski/redis/releases。
尚硅谷Redis学习笔记_第1张图片
解压
尚硅谷Redis学习笔记_第2张图片
开启Redis,双击运行服务即可
尚硅谷Redis学习笔记_第3张图片
尚硅谷Redis学习笔记_第4张图片
使用redis客户端来连接redis
尚硅谷Redis学习笔记_第5张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第6张图片

1、MySQL 300万条数据的时候一定要建立索引,要不然访问速度就会变慢

尚硅谷笔记

经常使用的命令

xshell命令

cd /usr/local/bin
redis-server /etc/redis.conf
ps -ef | grep redis
redis-cli
flushdb

vim命令

/要查找的字符串				//查找
:%s/要替换的字符串/新字符串	//替换
:wq!						//保存退出

尚硅谷Redis学习笔记_第7张图片
安装gcc
尚硅谷Redis学习笔记_第8张图片
解压redis文件
尚硅谷Redis学习笔记_第9张图片
进入redis目录后,使用make进行编译
尚硅谷Redis学习笔记_第10张图片
安装
尚硅谷Redis学习笔记_第11张图片
验证redis是否安装成功
尚硅谷Redis学习笔记_第12张图片
尚硅谷Redis学习笔记_第13张图片
前台启动redis(不推荐)
尚硅谷Redis学习笔记_第14张图片
后台启动
尚硅谷Redis学习笔记_第15张图片
修改etc目录下的文件内容
尚硅谷Redis学习笔记_第16张图片
尚硅谷Redis学习笔记_第17张图片

使用客户端连接
在这里插入图片描述
redis关闭
第一种方法
尚硅谷Redis学习笔记_第18张图片
第二种方法
在这里插入图片描述

Redis相关介绍

默认16个数据库,类似数组下标从o开始,初始默认使用o号库,
使用命令select来切换数据库。如: select 8
所有库的密码相同
尚硅谷Redis学习笔记_第19张图片

Redis和Memcache的比较

串行vs多线程+锁( memcached ) vs单线程+多路Io复用(Redis).
(与Memcache三点不同:支持多数据类型,支持持久化,单线程+多路IO复用)

Redis的key操作

1、 keys *查看当前库所有key
2、 exists key判断某个key是否存在
3、 type key查看你的 key是什么类型
4、 del key删除指定的key数据·
unlink key根据value选择非阻塞删除仅将keys 从 keyspace元数据中删除,真正的删除会在后续异步操作。
5、 expire key 10 10秒钟:为给定的 key设置过期时间
6、 ttl key查看还有多少秒过期,-1表示永不过期,-2表示已过期。

其他命令
dbsize查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库
尚硅谷Redis学习笔记_第20张图片

Redis字符串String

String是 Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

常用命令
1、 set :set key value设置相同的key将覆盖先前的值
2、 get:get key
3、 append key value将给定的value追加到原值的末尾。
4、 strlen key获得值的长度
5、 setnx key value只有在key 不存在时才设置key的值,存在时不设置
6、 incr key
将key中储存的数字值增1
只能对数字值操作,如果为空,新增值为1

7、 decr key
将key 中储存的数字值减1
只能对数字值操作,如果为空,新增值为-1
8、 incrby / decrby key 步长 将key中储存的数字值增减。自定义步长。
尚硅谷Redis学习笔记_第21张图片
尚硅谷Redis学习笔记_第22张图片
尚硅谷Redis学习笔记_第23张图片
尚硅谷Redis学习笔记_第24张图片
尚硅谷Redis学习笔记_第25张图片
尚硅谷Redis学习笔记_第26张图片
尚硅谷Redis学习笔记_第27张图片
尚硅谷Redis学习笔记_第28张图片

Redis列表List

尚硅谷Redis学习笔记_第29张图片
尚硅谷Redis学习笔记_第30张图片
尚硅谷Redis学习笔记_第31张图片
尚硅谷Redis学习笔记_第32张图片
尚硅谷Redis学习笔记_第33张图片
尚硅谷Redis学习笔记_第34张图片
尚硅谷Redis学习笔记_第35张图片
尚硅谷Redis学习笔记_第36张图片
尚硅谷Redis学习笔记_第37张图片
尚硅谷Redis学习笔记_第38张图片
尚硅谷Redis学习笔记_第39张图片
尚硅谷Redis学习笔记_第40张图片
尚硅谷Redis学习笔记_第41张图片
List数据结构
尚硅谷Redis学习笔记_第42张图片

Redis集合(Set)

简介
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变。
常用命令
尚硅谷Redis学习笔记_第43张图片
尚硅谷Redis学习笔记_第44张图片
尚硅谷Redis学习笔记_第45张图片
尚硅谷Redis学习笔记_第46张图片
数据结构
Set数据结构是dict字典,字典是用哈希表实现的。
Java中HashSet的内部实现使用的是 HashMap ,只不过所有的value都指向同一个对象Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。,

Redis哈希(Hash)

Redis hash是一个键值对集合。·
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Mapw
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储
主要有以下2种存储方式:
尚硅谷Redis学习笔记_第47张图片
尚硅谷Redis学习笔记_第48张图片
尚硅谷Redis学习笔记_第49张图片
尚硅谷Redis学习笔记_第50张图片
尚硅谷Redis学习笔记_第51张图片
尚硅谷Redis学习笔记_第52张图片

Redis有序集合zset

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分( score) ,这个评分( score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。
因为元素是有序的,所以你也可以很快的根据评分( score )或者次序( position )来获取一个范围的元素。
访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
尚硅谷Redis学习笔记_第53张图片
尚硅谷Redis学习笔记_第54张图片
尚硅谷Redis学习笔记_第55张图片
尚硅谷Redis学习笔记_第56张图片

Redis的配置文件

1、单位
配置大小单位,开头定义了一些基本的度量单位,只支持(字节)bytes,不支持bit,大小写不敏感
尚硅谷Redis学习笔记_第57张图片
2、包含
尚硅谷Redis学习笔记_第58张图片
3、网络
尚硅谷Redis学习笔记_第59张图片
尚硅谷Redis学习笔记_第60张图片

4、tcp-backlog 511
尚硅谷Redis学习笔记_第61张图片
尚硅谷Redis学习笔记_第62张图片
5、timeout
尚硅谷Redis学习笔记_第63张图片
6、tcp-keepalive 300
检测连接,间隔为300s
尚硅谷Redis学习笔记_第64张图片
7、pidfile /var/run/redis_6379.pid保存进程号
尚硅谷Redis学习笔记_第65张图片
8、log级别
尚硅谷Redis学习笔记_第66张图片
9、日志的输出路径
在这里插入图片描述
10、SECURITY
尚硅谷Redis学习笔记_第67张图片
11、限制
尚硅谷Redis学习笔记_第68张图片
尚硅谷Redis学习笔记_第69张图片
尚硅谷Redis学习笔记_第70张图片

Redis的发布和订阅

什么是发布和订阅
Redis发布订阅(pub/sub) 是一种消息通信模式 :发送者(pub) 发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。
尚硅谷Redis学习笔记_第71张图片

1、打开一个客户端订阅
开启两个客户端
尚硅谷Redis学习笔记_第72张图片
尚硅谷Redis学习笔记_第73张图片
尚硅谷Redis学习笔记_第74张图片
尚硅谷Redis学习笔记_第75张图片

Redis6- 新数据类型- Bitmaps

尚硅谷Redis学习笔记_第76张图片
尚硅谷Redis学习笔记_第77张图片
尚硅谷Redis学习笔记_第78张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第79张图片
尚硅谷Redis学习笔记_第80张图片
尚硅谷Redis学习笔记_第81张图片
尚硅谷Redis学习笔记_第82张图片
尚硅谷Redis学习笔记_第83张图片
尚硅谷Redis学习笔记_第84张图片
bitop
尚硅谷Redis学习笔记_第85张图片
尚硅谷Redis学习笔记_第86张图片
尚硅谷Redis学习笔记_第87张图片

尚硅谷Redis学习笔记_第88张图片
尚硅谷Redis学习笔记_第89张图片
尚硅谷Redis学习笔记_第90张图片
尚硅谷Redis学习笔记_第91张图片

Redis6- 新数据类型- HyperLogLog

尚硅谷Redis学习笔记_第92张图片
尚硅谷Redis学习笔记_第93张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第94张图片
尚硅谷Redis学习笔记_第95张图片
尚硅谷Redis学习笔记_第96张图片
尚硅谷Redis学习笔记_第97张图片

Redis6- 新数据类型-Geospatial

尚硅谷Redis学习笔记_第98张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第99张图片
尚硅谷Redis学习笔记_第100张图片
尚硅谷Redis学习笔记_第101张图片
尚硅谷Redis学习笔记_第102张图片
尚硅谷Redis学习笔记_第103张图片
尚硅谷Redis学习笔记_第104张图片

Redis-Jedis操作

尚硅谷Redis学习笔记_第105张图片
尚硅谷Redis学习笔记_第106张图片
虚拟机防火墙问题
尚硅谷Redis学习笔记_第107张图片
解决
查看防火墙是开启状态
在这里插入图片描述
关闭防火墙
尚硅谷Redis学习笔记_第108张图片
成功连接
尚硅谷Redis学习笔记_第109张图片

Redis6- Jedis案例模拟验证码发送

尚硅谷Redis学习笔记_第110张图片

spring boot整合Redis

Redis事务

Redis事务是一个单独的隔离操作∶事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队。
尚硅谷Redis学习笔记_第111张图片
尚硅谷Redis学习笔记_第112张图片
尚硅谷Redis学习笔记_第113张图片
在这里插入图片描述

事务的错误处理

组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。
尚硅谷Redis学习笔记_第114张图片
情况一:组队时就失败
尚硅谷Redis学习笔记_第115张图片
情况二:组队成功,但是执行失败
尚硅谷Redis学习笔记_第116张图片

事务冲突的问题.

一个请求想给金额减8000.
—个请求想给金额减5000.
一个请求想给金额减1000.
尚硅谷Redis学习笔记_第117张图片
悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁↓这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis 就是利用这种check-and-set机制实现事务的。·

尚硅谷Redis学习笔记_第118张图片
尚硅谷Redis学习笔记_第119张图片
乐观锁演示
尚硅谷Redis学习笔记_第120张图片
尚硅谷Redis学习笔记_第121张图片

Redis事务三特性

尚硅谷Redis学习笔记_第122张图片

Redis持久化

Redis持久化RDB

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接卖到内存里

12.2.3.备份是如何执行的
Redis,会单独创建( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
尚硅谷Redis学习笔记_第123张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第124张图片

尚硅谷Redis学习笔记_第125张图片
尚硅谷Redis学习笔记_第126张图片
尚硅谷Redis学习笔记_第127张图片
尚硅谷Redis学习笔记_第128张图片
尚硅谷Redis学习笔记_第129张图片
尚硅谷Redis学习笔记_第130张图片
RDB
尚硅谷Redis学习笔记_第131张图片
尚硅谷Redis学习笔记_第132张图片
RDB备份
尚硅谷Redis学习笔记_第133张图片
尚硅谷Redis学习笔记_第134张图片

Redis持久化AOF

尚硅谷Redis学习笔记_第135张图片
尚硅谷Redis学习笔记_第136张图片
尚硅谷Redis学习笔记_第137张图片

尚硅谷Redis学习笔记_第138张图片
重启服务就可以看到生成一个aof文件
尚硅谷Redis学习笔记_第139张图片
尚硅谷Redis学习笔记_第140张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第141张图片
尚硅谷Redis学习笔记_第142张图片
尚硅谷Redis学习笔记_第143张图片
尚硅谷Redis学习笔记_第144张图片
尚硅谷Redis学习笔记_第145张图片
尚硅谷Redis学习笔记_第146张图片
尚硅谷Redis学习笔记_第147张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第148张图片
尚硅谷Redis学习笔记_第149张图片
尚硅谷Redis学习笔记_第150张图片
在这里插入图片描述

尚硅谷Redis学习笔记_第151张图片
尚硅谷Redis学习笔记_第152张图片

Redis主从复制

14.1.是什么。
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,slave以读为主
14.2.能干嘛
读写分离,性能扩展
容灾快速恢复:当有一台服务器垮掉了,可以从另一台读
尚硅谷Redis学习笔记_第153张图片

搭建一主多从

尚硅谷Redis学习笔记_第154张图片

尚硅谷Redis学习笔记_第155张图片
在这里插入图片描述

尚硅谷Redis学习笔记_第156张图片
尚硅谷Redis学习笔记_第157张图片
启动三个服务
尚硅谷Redis学习笔记_第158张图片
尚硅谷Redis学习笔记_第159张图片
尚硅谷Redis学习笔记_第160张图片
尚硅谷Redis学习笔记_第161张图片
尚硅谷Redis学习笔记_第162张图片
尚硅谷Redis学习笔记_第163张图片
尚硅谷Redis学习笔记_第164张图片
从服务器挂掉之后再重启就变成了主服务器
尚硅谷Redis学习笔记_第165张图片
需要重新加入主服务器,加入后主服务器的数据自动同步到从服务器
尚硅谷Redis学习笔记_第166张图片
尚硅谷Redis学习笔记_第167张图片

薪火相传

尚硅谷Redis学习笔记_第168张图片
尚硅谷Redis学习笔记_第169张图片

反客为主

尚硅谷Redis学习笔记_第170张图片
在这里插入图片描述

哨兵模式

尚硅谷Redis学习笔记_第171张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第172张图片
尚硅谷Redis学习笔记_第173张图片
尚硅谷Redis学习笔记_第174张图片
主服务器挂掉后,其中的一个从服务器会自动编程主服务器,原主服务器再启动时,不再是主服务器,而是变成从服务器
尚硅谷Redis学习笔记_第175张图片

Redis集群

尚硅谷Redis学习笔记_第176张图片
尚硅谷Redis学习笔记_第177张图片

尚硅谷Redis学习笔记_第178张图片

搭建集群

尚硅谷Redis学习笔记_第179张图片
在这里插入图片描述
在这里插入图片描述
尚硅谷Redis学习笔记_第180张图片
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
尚硅谷Redis学习笔记_第181张图片

修改每一个文件
尚硅谷Redis学习笔记_第182张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第183张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第184张图片
redis-cli --cluster create --cluster-replicas 1 192.168.171.194:6379 192.168.171.194:6380 192.168.171.194:6381 192.168.171.194:6389 192.168.171.194:6390 192.168.171.194:6391
尚硅谷Redis学习笔记_第185张图片
得到一个值:16384 slots covered
尚硅谷Redis学习笔记_第186张图片
在这里插入图片描述
连接集群并查看集群主从情况
尚硅谷Redis学习笔记_第187张图片
尚硅谷Redis学习笔记_第188张图片
尚硅谷Redis学习笔记_第189张图片

slots

尚硅谷Redis学习笔记_第190张图片
在这里插入图片描述
尚硅谷Redis学习笔记_第191张图片
尚硅谷Redis学习笔记_第192张图片

尚硅谷Redis学习笔记_第193张图片
尚硅谷Redis学习笔记_第194张图片
尚硅谷Redis学习笔记_第195张图片
尚硅谷Redis学习笔记_第196张图片

Jedis操作集群

尚硅谷Redis学习笔记_第197张图片

//jedis操作集群
	@Test
	public void testJedisColony() throws Exception {
		//创建对象
		HostAndPort hostAndPort = new HostAndPort("192.168.171.195", 6379);
		JedisCluster jedisCluster = new JedisCluster(hostAndPort);
		
		//进行操作
		jedisCluster.set("b1", "value1");
		
		String value = jedisCluster.get("b1");
		System.out.println("value == "+value);
		
		//关闭
		jedisCluster.close();
	}

尚硅谷Redis学习笔记_第198张图片
尚硅谷Redis学习笔记_第199张图片

Redis运用问题的解决

缓存穿透

尚硅谷Redis学习笔记_第200张图片
尚硅谷Redis学习笔记_第201张图片
尚硅谷Redis学习笔记_第202张图片

缓存击穿

尚硅谷Redis学习笔记_第203张图片
尚硅谷Redis学习笔记_第204张图片
尚硅谷Redis学习笔记_第205张图片
尚硅谷Redis学习笔记_第206张图片
尚硅谷Redis学习笔记_第207张图片

换错学霸

尚硅谷Redis学习笔记_第208张图片
尚硅谷Redis学习笔记_第209张图片
尚硅谷Redis学习笔记_第210张图片
尚硅谷Redis学习笔记_第211张图片

分布式锁

尚硅谷Redis学习笔记_第212张图片
尚硅谷Redis学习笔记_第213张图片
尚硅谷Redis学习笔记_第214张图片
尚硅谷Redis学习笔记_第215张图片

尚硅谷Redis学习笔记_第216张图片
尚硅谷Redis学习笔记_第217张图片
在这里插入图片描述

Redis6新功能

尚硅谷Redis学习笔记_第218张图片
尚硅谷Redis学习笔记_第219张图片
尚硅谷Redis学习笔记_第220张图片
尚硅谷Redis学习笔记_第221张图片

尚硅谷Redis学习笔记_第222张图片
尚硅谷Redis学习笔记_第223张图片
尚硅谷Redis学习笔记_第224张图片
尚硅谷Redis学习笔记_第225张图片

你可能感兴趣的:(#,redis,redis,缓存,java)