1.初识Redis
1.Redis概念
Redis诞生与2009年全称Remote Dictionoary Server ,远程词典服务,是一个基于内存的键值型NOSQL数据库。
2.特征
- 键值(Key-Value)型,value支持多种不同数据结构,功能丰富。
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存,IO多路复用,良好的编程)
- 支持数据持久化
- 支持主从集群,分片集群
- 支持多语言客户端
1.认识NoSQL
SQL与NOSQL的比较:
2.认识Redis
3.安装Redis
1.安装参考文章:
2.Redis命令行客户端:
登录连接服务器,启动redis(systemctl start redis),然后 cd /usr/local/src/redis-6.2.6
开启使用redis:redis-cli -h 主机地址 -p 6379 -a YOUR_PASSWORD --no-auth-warning
3.Redis图像化界面:resp
位置: D:Redis-rdm
2.Redis常用命令
1.五种常见数据结构
1.String
key的结构:
2.Hash
3.List
Redis中的List类型与java中的LinkedList类似,可以看作是一个双向链表结构。支持正向检索和反向检索。
特征:与LinkedList类似
- 有序
- 元素可以重复
- 插入速度一般
- 查询速度一般
4.Set
5.SortedSet
Redis的SortedSet是一个可排序的set集合,与java的TreeSet有些类似,但底层数据结构却差别很大。SortedSet的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。
SortedSet具备下列特性:
- 可排序性
- 元素不重复性
- 元素查询速度快
因为SortedSet的可排序特性,经常备用来实现排行榜这样的功能。
SortedSet常见命令:
2.通用命令
通用指令是部分数据类型的,都可以使用的指令,常见有:
3.不同数据结构的操作命令
3.Redis的java客户端
1.Jedis客户端
Jedis快速入门
Jedis连接池
2.SpringDataRedis客户端
SpringData是Spring中数据库的操作模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。
SpringDataRedis:
1.SpringRedisData快速入门
SpringDataRedis中提供了RedisTempleta工具类,其中封装了各种对Redis的操作。斌且将不同数据类型的API封装到了不同的类型中。
入门步骤:
2.SpringRedisData序列化工具
RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把序列化作为字节形式,默认是采用JDK序列化,缺点是可读性差,占用内存较大。
因此:
自定义RedisTemplate序列化工具(可以实现set的时候自动序列化,读的时候自动反序列化)
为了节省内存空间,需要手动完成对象的序列化和反序列化。
Spring提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去自定义RedisTemplate的过程。
3.总结
RedisTemplate两种反序列化实践方案:
黑马点评(Redis)
- 业务功能介绍
- 短信登录----Redis的共享session应用
- 商户查询缓存----企业的缓存使用技巧;缓存雪崩、穿透等问题
- 达人探店----基于List的点赞列表;基于SortedSet的点赞排行榜
- 优惠券秒杀----Redis的计数器、Lua脚本Redis;分布式锁;Redis的三种消息队列
- 好友关注----基于set集合的关注、取关、共同关注、消息推送等功能
- 附近的商户----Redis的GeoHash的应用
- 用户签到----Redis的BitMap数据统计功能
- UV统计----Redis的HyperLogLog的统计功能
项目整体架构
导入黑马点评项目
导入后端项目 运行前端项目
1.短信登录
1.基于session实现登录
流程
1.发送短信验证码
2.登录校验功能
拦截器
2.集群的session共享问题
session共享问题:多台Tomcat(实现负载均衡)并不共享session存储空间,当请求切换到不同Tomcat服务时导致数据丢失问题。
session替代方案应该满足:
- 数据共享
- 内存存储
- key、value结构
解决方案:用Redis代替session。
3.基于Redis实现session登录
复习RedisString和Hash
用Redis代替session实现的登录业务流程的变化,流程框架图:
2.商户缓存查询
1.什么是缓存
缓存就是数据交换的缓存区(称作cache),存储数据的临时地方,一般读写性能较高。
浏览器(浏览器缓存)-->tomcat(应用层缓存)--->数据库(数据库缓存)---->cpu缓存和磁盘缓存。
2.添加Redis缓存
缓存作用模型 根据id查询商铺缓存流程
3.缓存更新策略
主动更新策略:(1 2 3 个方案)
推荐采用方案1:
---->
总结:
4.缓存穿透(热点Key)
概念:
是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
布隆过滤器如何了解数据库和缓存中的数据是否存在:布隆过滤器是指基于哈希算法将数据库中的数据计算成二进制之后保存到布隆过滤器,然后请求的数据到达布隆过滤器之后一个个对,0表示数据存在,1表示不存在。
因此缓存null值的解决缓存穿透的思路流程是:
总结
1.缓存穿透的原因?
答:用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求给数据库带来巨大压力。
2.缓存穿透的解决方案有哪些?
答:
-
- 缓存null值
- 布隆过滤器
- 增强id的复杂程度,避免备猜测id规律
- 做好数据的基础格式
- 加强用户权限校验
- 做好热点参数的限流
5.缓存雪崩
缓存雪崩是指同一段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决方案:
- 给不同的key的TTL添加随机值
- 利用Redis集群提高服务的可用性
- 给缓存业务添加降级限流策略
- 给业务添加多级缓存
6.缓存击穿
缓存击穿问题也叫做热点Kye问题,就是一个被高并发且缓存重建业务较复杂的key突然消失了,无数的请求访问会瞬间给数据库带来巨大的冲击。
常见解决方案:
1.互斥锁
2.逻辑过期
互斥锁与逻辑过期方案的对比:
基于互斥锁解决缓存击穿问题
基于逻辑过期方式解决缓存击穿问题
7.缓存封装工具
基于StringRedisTemplate封装一个缓存工具类,要求满足以下需求:
3.优惠券秒杀
1. 全局唯一ID
概念:是一种分布式系统下用来生成全局唯一ID的工具,一般满足以下特性:
- 唯一性
- 高可用
- 高性能
- 递增性
- 安全性
总结:
2. 实现优惠券秒杀下单
优惠券秒杀下单流程图:
3. 超卖问题
JMeter(全栈压力测试工具)位置:E:JMeterapache-jmeter-5.6.3bin。
双击jmeter.bat 打开JMeter。
乐观锁方法
常见有两种:
超卖
分段锁也可以解决成功率低的问题。
4. 一人一单
通过加锁可以解决在单机情况下一人一单安全问题,但在集群模式下就不行了。
一人一单并发安全问题
在集群模式下或者分布式系统下,有多个jvm的存在,每个jvm内部都有自己的锁,导致每一个锁都可以有一个线程获取,于是出现了并行运行,那么就可能出现安全问题。
解决办法:让多个jvm使用同一个锁-----跨jvm/跨进程的锁------>分布式锁。
5. 分布式锁
分布式锁原理图:
什么是分布式锁:满足分布式系统或者集群模式下多进程可见性并且互斥的锁。
要求满足:
- 多进程可见
- 互斥
- 高可用
- 高性能
- 安全性
......
分布式锁的实现
基于Redis的分布式锁
实现分布式锁是需要实现的两个基本方法:
实现流程图:
对于Redis分布式锁误删问题
=====>
因此,解决Redis分布式锁误删的关键是:在释放锁的时候判断线程锁标示是否是自己的。
改进Redis分布式锁误删问题
Redis的Lua脚本
Redis提供了Lua脚本功能,在一个脚本中编写对条Redis命令,确保多条命令执行时的原子性。Lua是一种编程语言。
、
再次改进Redis分布式锁
总结
基于Redis的分布式锁实现思路:
- 利用set nx ex 获取锁,并设置过期时间,保存线程标示
- 释放锁时先判断线程标示是否与自己一致,一致则删除锁
特性:
- 利用set nx ex 满足互斥
- 利用set nx 保证故障时锁依然能释放,避免死锁,提高安全性
- 利用Redis集群保证高可用和高并发特性
Redisson
基于Redis的分布式锁优化
Redisson入门
Redisson可重入锁原理
6. Redis优化秒杀
7. Redis消息队列实现异步秒杀
到此这篇连接redis的软件(如何连接redis数据库)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/17369.html