Redis
一、Redis简介
1.基本介绍
- 一种NoSQL(Not-OnlySQL泛指非关系型数据库):作为关系型数据库的补充。是用C语言开发的一个开源的高性能键值对(key-value)数据库。
- 作用:应对基于海量用户和海量数据前提下的数据处理问题
- 特征:
①可扩容,可伸缩
②大数据下高性能
③灵活的数据模型
④高可用 - 常见的Nosql数据库:Redis,memcache,HBase,MongoDB
- 使用场景:
MySQL的数据先进行分类,交给不同的非关系型数据库集群,再对外提供数据服务:
- 特征:
- Redis的应用:
2.基本操作
应用命令行:
- 功能性指令
- 清除屏幕信息
- 帮助信息查阅
- 退出指令
2.1具体指令
①信息添加(设置key,value数据):set key value
②信息查询(查询key的值,没有返回null):get key
③清除屏幕信息:clear
④帮助(获取命令帮助文档,获取组中所有命令信息名称):help 命令名称/@组名(string)
其信息表示为:
⑤退出客户端:quit exit <ESC>
二、数据存储类型介绍
1.业务数据的特殊性
作为缓存使用:
- 原始业务功能设计:秒杀、京东618、天猫双11、12306
- 运营平台监控到的突发高频访问数据:突发要闻强势关注
- 高频复杂的统计数据:直播在线人数、投票排行榜
- 系统功能优化或升级:单服务器升级集群、Session管理、Token管理
2.Redis数据类型
可类比java中的结构思想:
3.redis数据存储格式
3.1string类型
3.1.1string介绍
key永远都是一个String,而所说的数据类型指的是value
3.1.2string类型常用方法和注意事项
注:(integer 1代表操作成功integer 0代表操作失败 nil代表不存在),根据代码有时也表示执行后的结果值
- 其常见基本操作:
注:在同等数据量的发送下,数据发送可选择单行数据和多行数据发送,单数据发送需要两次发送数据的时间和一个执行时间,而多数据发送只需要两次发送数据的时间和n(条数据)个执行时间,所以同等数据的条件下,单发送数据的效率不如多发送数据 - 扩展操作:解决MySQL中分表使其主键不重复的问题
注:这两种方法后都可跟负数
- 数据时效性设置:为数据设置指定的生命周期(即确定一个数据能活多久)通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
注:数据最大存储量:512MB,数据计算最大范围(java中的long的最大值)
3.1.3string应用场景
在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可。redis应用于各种结构型和非结构型高热度数据访问加速
使用以用户主键和属性值作为key,后台设定定时刷新策略即可
使用以json格式存储大V用户信息,定时刷新(也可以使用hash类型)
两种方法都可以,第一种可以直接根据命令行的代码改变数据,第二种改需要全改数据
3.1.4key的设置约定
3.2hash类型
3.2.1hash概述
左边是key,右边就对应的是数据类型hash
3.2.2hash特点
如果field数量较少,存储结构优化为类数组结构
如果field数量较多,存储结构使用HashMap结构
3.2.3hash类型数据的基本操作
扩展操作:
3.2.4hash类型数据操作的注意事项
3.2.5hash类型应用场景 :电商网站购物车设计与实现
应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计
string数据存储讲究整体性,一次性更新或获取,将就读为主
hash数据存储可以根据field把属性分开,所以讲究灵活性,已更新为主
3.3list类型
3.3.1list数据类型概述
3.3.2list数据类型的基本操作
扩展操作(list阻塞数据获取):
类似任务队列实现的基础操作:当某个list(或多个list)中在限定时间timeout内一有值则立马取出来,超过时间限制没有值的话返回nil
3.3.3list扩展操作的业务场景
微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息
如果取消点赞,移除对应好友信息
比如一个双端队列十三个数,包含4个a,删除其中三个a,l指代的是左删
3.3.4list类型数据操作注意事项
3.3.5list类型应用场景:
①依赖list的数据具有顺序的特征对信息进行管理
②使用队列模型解决多路信息汇总合并的问题
③使用栈模型解决最新消息的问题
3.4set类型
3.4.1set数据类型的概述
3.4.2set数据类型的基本操作
扩展操作:
3.4.3set数据类型的注意事项
3.4.4set数据类型的应用场景
根据set数据类型的特点可以实现数据的去重
验证黑名单的用户
3.5 sorted_set数据类型
3.5.1sorted_set数据类型概述
3.5.2sorted_set数据的基本操作
扩展操作:
专门用来为所有参与排名的资源建立排序数据
3.5.3sorted_set数据的注意事项
3.5.4sorted_set数据的应用场景
对于带有权限的:
必须补齐数位才能比较
4.Redis实际应用总结
- redis用于控制数据库表主键id,为数据库表逐渐提供生成策略,保障数据库表的主键唯一性
- redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
- redis应用于各种结构性和非结构性高热度数据访问加速
- redis应用于购物车数据存储设计
- redis应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计
- redis应用于具有操作先后顺序的数据控制
- redis应用于最新消息的展示
- redis应用于随即推荐类信息检索,例如热点歌单推荐,热点新闻推荐热卖旅游线路,应用APP推荐,大V推荐等
- redis应用于同类信息的关联检索,二度关联检索,深度关联检索
- redis应用于同类型数据的快速去重
- redis应用于基于黑名单与白名单设定的服务控制
- redis应用于计数器组合排序功能对应的排名
- redis应用于定时任务执行顺序管理或任务过期管理
- redis应用于即使任务、消息队列执行管理
- redis应用于显示按次结算的服务控制
- redis应用于基于时间顺序的数据操作,而不关注具体时间(微信接收消息)
二、通用命令
1.key通用指令
①key特征:key是一个字符串,通过key获取redis中保存的数据
②基本指令:
③扩展指令(时效性控制):分设置状态的、看状态的和改状态的
④扩展指令(查询模式):查询key
⑤其他操作:
2.数据库通用指令
①数据库中key的重复问题及解决:
问题:key是由程序员定义的,redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key,数据不区分种类、类别混杂在一起,极易出现重复或冲突
解决:redis为每个服务提供有16个数据库,编号0到15,且每个数据库之间独立
②基本指令:
quit用来退出,ping用于检查是否与服务器连接,echo用于检查服务器的响应情况
③相关操作指令:
dbsize看看当前库里key的个数
flushdb刷掉你现在的数据,flushall刷掉所有的数据
三、Jedis
1.jedis简介
Java语言链接redis服务的方式:jedis、SpringData Redis、Lettuce
2.jedis的引入
jedis与redis的语法一模一样:
四、引入Reids依赖,用模板操作相关redis业务
1.引入依赖
<!--Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.注入RedisTemplate注解
根据RedisTemplate操作相关redis的数据类型操作
3.使用redis存储验证码
取消Session存储验证码的方式,先为客户端的用户设置一个临时的凭证,用cookie存储,设置很短的时效,再用redis存储验证码,效率较高
4.使用Redis缓存用户信息
处理每次请求时,都要根据凭证查询用户信息,访问的频率非常高,缓存按照三步进行:
注:数据更改后,要先清除缓存,再将新的数据存入缓存