尚硅谷Redis学习笔记

Posted 江州益彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尚硅谷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,双击运行服务即可


使用redis客户单来来接redis


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

尚硅谷笔记

经常使用的命令

xshell命令

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

vim命令

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


安装gcc

解压redis文件

进入redis目录后,使用make进行编译

安装

验证redis是否安装成功


前台启动redis(不推荐)

后台启动

修改etc目录下的文件内容

使用客户端连接

redis关闭
第一种方法

第二种方法

Redis相关介绍

默认16个数据库,类似数组下标从o开始,初始默认使用o号库,
使用命令select来切换数据库。如: select 8
所有库的密码相同

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字符串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列表List














List数据结构

Redis集合(Set)

简介
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变。
常用命令




数据结构
Set数据结构是dict字典,字典是用哈希表实现的。
Java中HashSet的内部实现使用的是 HashMap ,只不过所有的value都指向同一个对象Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。,

Redis哈希(Hash)

Redis hash是一个键值对集合。·
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>w
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储
主要有以下2种存储方式:





Redis有序集合zset

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



Redis的配置文件

1、单位
配置大小单位,开头定义了一些基本的度量单位,只支持(字节)bytes,不支持bit,大小写不敏感

2、包含

3、网络

4、tcp-backlog 511


5、timeout

6、tcp-keepalive 300
检测连接,间隔为300s

7、pidfile /var/run/redis_6379.pid保存进程号

8、log级别

9、日志的输出路径

10、SECURITY

11、限制


Redis的发布和订阅

什么是发布和订阅
Redis发布订阅(pub/sub) 是一种消息通信模式 :发送者(pub) 发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。

1、打开一个客户端订阅
开启两个客户端



Redis6- 新数据类型- Bitmaps











bitop





Redis6- 新数据类型- HyperLogLog







Redis6- 新数据类型-Geospatial








Redis-Jedis操作



虚拟机防火墙问题

解决
查看防火墙是开启状态

关闭防火墙

成功连接

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

spring boot整合Redis

Redis事务

Redis事务是一个单独的隔离操作∶事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队。



事务的错误处理

组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。

情况一:组队时就失败

情况二:组队成功,但是执行失败

事务冲突的问题.

一个请求想给金额减8000.
—个请求想给金额减5000.
一个请求想给金额减1000.

悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁↓这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

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



乐观锁演示

Redis事务三特性

Redis持久化

Redis持久化RDB

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

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








RDB


RDB备份

Redis持久化AOF




重启服务就可以看到生成一个aof文件















Redis主从复制

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

搭建一主多从




启动三个服务







从服务器挂掉之后再重启就变成了主服务器

需要重新加入主服务器,加入后主服务器的数据自动同步到从服务器

薪火相传


反客为主


哨兵模式






主服务器挂掉后,其中的一个从服务器会自动编程主服务器,原主服务器再启动时,不再是主服务器,而是变成从服务器

Redis集群


搭建集群





cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

修改每一个文件





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

得到一个值:16384 slots covered


连接集群并查看集群主从情况


slots







Jedis操作集群

//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运用问题的解决

缓存穿透



缓存击穿





换错学霸




分布式锁






Redis6新功能




尚硅谷Redis学习笔记-- Redis应用问题解决

尚硅谷Redis学习笔记-- Redis持久化操作

尚硅谷Redis学习笔记-- Redis主从复制

尚硅谷Redis学习笔记-- Jedis的使用

尚硅谷Redis学习笔记-- Redis秒杀案例

尚硅谷Redis学习笔记-- Redis集群