Redis实战教程

沙海 2019年1月24日22:16:01Java SQL Redis评论2061字数 3867阅读12分53秒阅读模式

Redis:

1、了解NoSQL
2、redis学习
     redis概念
     redis应用场景 ***
     redis中操作的数据类型
3、Windows操作系统安装与启动redis
4、基于命令操作redis的各种数据类型数据  重点了解redis操作命令
5、redis的持久化
6、基于jedis操作redis
7、基于redis优化旅游网功能点
    1、首页导航栏展示
    2、用户注册时,验证码缓存操作

Mysql: 数据库(关系型数据库) DBMS文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 数据库: database
  • 表: table
  • 行: 记录
  • 列: 字段

关系型数据库: 文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 数据存储时,数据和数据之间有一定的关联关系.
  • 将数据存放在硬盘上
  • Redis: 数据库(非关系型数据库)

非关系型数据库:文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 数据存储时,数据和数据之间没有任何的关联关系(类似于map集合)
  • 将数据存放在内存中

1、NOSQL:

SQL: 结构化查询语言.文章源自JAVA秀-https://www.javaxiu.com/932.html

概述:

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。文章源自JAVA秀-https://www.javaxiu.com/932.html

关系型数据库: mysql Oracle (DBMS:数据库管理系统)文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 数据存储时,数据和数据之间有一定的关联关系.
  • 数据都存放在硬盘上.
  • 数据库管理系统: Mysql
  • 数据库:
  • 表:

非关系型数据库:文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 数据存储时,数据和数据之间没有任何的关联关系.
  • 数据库中的数据存内存中.
  • 宕机: 非正常关机
  • 吞吐量:海量的

NOSQL作用:

解决三高问题:文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 高并发:应对并发访问问题。因为数据从内存中获取,数据操作更快速。
  • 高负载(高存储): 因为NoSQL非关系型数据库,数据存储量很大。例如:String类型能够存储512M内容。
  • 高扩展(高可用): 因为数据与数据直接没有关联关系,可以很容易的添加非关系型数据库服务器节点。
  • tomcat:支持200个请求。

特点:

  • 易扩展 :数据与数据之间没有关联关系
  • 大数据量,高性能
  • 灵活的数据模型:可以任意加减数据模型字段
  • 高可用:搭建主从备份方式,实现高可用

2、Redis:

概述:

Redis是用C语言开发的一个开源的高性能键值对(key-value)非关系型数据库。文章源自JAVA秀-https://www.javaxiu.com/932.html

  • key:字符串类型
  • value数据结构比较丰富

数据结构:

  • 字符串类型 string 重点
  • 散列类型     hash
  • 列表类型     list 有序可重复
  • 集合类型     set 无序不可重复
  • 有序集合类型 sortedset 有序不可重复 zset

redis应用场景:

  • 做缓存: 缓存的是使用频次较高,但不是特别重要的数据. 重要。例如:京东门户网站。那些模块可以使用缓存呢?
  • 其中:商品分类列表数据经常查询,但是分类数据有很少发生变化。那为了减少数据库访问压力,提高查询性能,可以使用redis将分类列表数据缓存。
  • 在做秒杀或抢购业务时,也可以使用缓存完成。主要使用redis缓存高性能。
  • 任务队列。(秒杀、抢购、12306等等) 3、应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒) 可以基于redis设置数据有效时间的方式,定时是数据过期,并从redis移除
  • 分布式集群架构中的session分离
    • 请求来时,优先查询非关系型数据库,
    • 如果没有查到则查询关系型数据库,从关系型数据库中查询到结果后,将结果存放到非关系型数据库中,并将结果返回给浏览器.
    • 如果查询到了,直接将查询结果返回给浏览器即可
    • 当用户执行 增 删 改操作时,优先操作关系型数据库, (数据丢失)
    • 操作完毕后,删除非关系型数据库中的相关数据. (数据同步)

redis安装:

  • 解压缩即可
  • redis默认端口号是:6379

redis启动和关闭:

启动:文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 方式1:
    • 启动服务器: 双击 redis-server.exe 文件
    • 启动客户端: 双击 redis-cli.exe 文件
  • 方式2: 使用指定配置文件开启服务 (会持久化) ★★★★★
    • 启动服务器: 在dos命令中输入 redis-server.exe redis.windows.conf
    • 启动客户端: 在dos命令中输入 redis-cli.exe

关闭: 文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 方式1: 点击 X 号 非正常关闭,数据仍然不会持久化到磁盘
  • 方式2: 正常关闭 ★★★★★ 正常关闭时,数据会持久化到磁盘上
    • 在dos命令中输入 redis-cli.exe shutdown
    • 退出客户端的名称 quit

总结:文章源自JAVA秀-https://www.javaxiu.com/932.html

  • 在Windows上基于dos命令结合redis配置文件启动redis,可以实现redis数据的持久化。当然,前提是停止redis服务时,需要正常关闭,即通过命令完成关闭redis操作。redis-cli.exe shutdown。为了数据安全,建议使用第二种启动方式。

redis命令:

redis命令参考文档:http://redisdoc.com文章源自JAVA秀-https://www.javaxiu.com/932.html

基于get key 获取的值如果是nil,代表该值不存在。
​	使用命令操作redis的数据结构
​	redis:        key-value
​	                 key: String
​			 value: 5种
​				 String★	Hash  List  Set	 SortedSet

​        操作redis的String类型
​			set key value   如果value是连续字符串,例如:tom,可以省略引号,如果不是连续字符串,例如”rose jhon“,则必须加引号
​			设置值时,当key不存在,则新增数据。如果key存在,则后面设置的值覆盖之前的值。
​			get key
​			del key

​	常用:
​			keys * 
​			type key
​			del key
​			exists key

​	操作hash类型数据 
​			设置值:hset key field value 
​			获取值:hget key field
​			删除值:hdel key field
​			删除整个hash对象:del key

​	操作list类型数据 
​			设置值:lpush key values  左压栈  rpush key values 右压栈
​			获取值:lpop key values  左弹栈  rpop key values 右弹栈
​			获取某些值  lrange key 起始索引 结束索引

​	操作set类型数据
​			设置值:sadd key values 数据存储是无序的,且不能重复
​			获取值:smembers key
​			删除值:srem key values

        操作zset类型数据(补充了解)
​			设置值:zadd key score1 value1 score2 value2...: 设置添加
​                        获取值:zscore key value :获取成员的数字
​                        删除值:zrem key value1 value2... :删除指定成员
​                        zcard key :展示元素的长度

redis持久化:

注意: 要想使用redis的持久化操作,启动redis时必须采用配置文件.文章源自JAVA秀-https://www.javaxiu.com/932.html

一种是RDB方式: (默认)

rdb方式在持久化数据时,采用快照机制.文章源自JAVA秀-https://www.javaxiu.com/932.html

执行快照保存的时机: 文章源自JAVA秀-https://www.javaxiu.com/932.html

save 900 1 文章源自JAVA秀-https://www.javaxiu.com/932.html

第二个参数:多少秒后执行(执行时间) 第三个参数:至少几个key值发生改变,才执行RDB持久化 save 300 10 save 60 10000。文章源自JAVA秀-https://www.javaxiu.com/932.html

配置文件中配置了持久化保存的文件名称 dbfilename dump.rdb。文章源自JAVA秀-https://www.javaxiu.com/932.html

存在问题: 可能导致数据丢失。文章源自JAVA秀-https://www.javaxiu.com/932.html

在redis的配置文件中已经定义好使用rdb方式进行持久化了,将持久化的数据存放在当前目录的dump.rdb.文章源自JAVA秀-https://www.javaxiu.com/932.html

redis服务器正常关闭时也会执行持久化操作(快照保存数据)。文章源自JAVA秀-https://www.javaxiu.com/932.html

一种是AOF方式:

持久化的是执行过程,每一条命令都会持久化保存文章源自JAVA秀-https://www.javaxiu.com/932.html

使用方式:文章源自JAVA秀-https://www.javaxiu.com/932.html

1.开启AOF持久化(修改配置文件)文章源自JAVA秀-https://www.javaxiu.com/932.html

将配置文件中的 appendonly 改为 yes文章源自JAVA秀-https://www.javaxiu.com/932.html

appendfsync always (我们使用的)文章源自JAVA秀-https://www.javaxiu.com/932.html

# appendfsync everysec文章源自JAVA秀-https://www.javaxiu.com/932.html

# appendfsync no文章源自JAVA秀-https://www.javaxiu.com/932.html

特点:文章源自JAVA秀-https://www.javaxiu.com/932.html

不会导致数据丢失,但是性能低。文章源自JAVA秀-https://www.javaxiu.com/932.html

在实际开发中,往往采用RDB结合AOF完成持久化操作。文章源自JAVA秀-https://www.javaxiu.com/932.html

3、jedis:

jdbc: java操作mysql数据的方式文章源自JAVA秀-https://www.javaxiu.com/932.html

jedis: java操作redis数据库的方式文章源自JAVA秀-https://www.javaxiu.com/932.html

1、创建demo项目
2、导入相关jar包,并添加类路径
3、编写代码,完成基于jedis操作redis

三天案例中:文章源自JAVA秀-https://www.javaxiu.com/932.html

展示分类信息: 作业文章源自JAVA秀-https://www.javaxiu.com/932.html

优化导航条中的分类信息:文章源自JAVA秀-https://www.javaxiu.com/932.html

使用redis做缓存.文章源自JAVA秀-https://www.javaxiu.com/932.html

4、优化旅游项目

1、优化导航条中的分类信息文章源自JAVA秀-https://www.javaxiu.com/932.html

1、当用户查看首页时,导航栏时先尝试从redis中获取
2、如果能够从redis获取,直接返回
3、如果不能从redis获取,则从mysql中获取,并将查询结果放入redis中
优势:1、减少数据库访问压力  2、提高数据查询性能,改善用户体验。

注意:当首页旅游分类导航栏数据发生增删改操作时,需要清除redis中分类导航栏数据,从而实现redis与mysql数据同步。

实现步骤:
    1、导入redis相关jar坐标
    2、将操作redis的连接池工具类和配置文件导入旅游项目中
    3、基于以上分析逻辑,改造分类导航栏查看代码

2、优化基于redis存储用户注册验证码,并通过redis的API设置验证码过期时间文章源自JAVA秀-https://www.javaxiu.com/932.html

由于之前没有学习redis,将手机验证码存入session中。session的生命周期过长,不适合存验证码数据
可以改造为基于redis存储

将之前基于session存验证码操作全部改为redis即可。jedis还可以设置redis数据的过期时间,正好满足业务要求。
可以设置验证码5分钟失效。

注意:当用户注册成功后,一定记得清除redis中记录的验证码

总结

1、介绍NoSQL 非关系型数据库
2、redis简介  重点掌握:redis应用场景 redis操作的数据类型
3、在Windows安装并运行redis  掌握:基于命令结合配置文件的方式启动并停止redis操作
4、基于命令操作redis各种数据类型
5、介绍redis持久化操作和配置
6、重点  掌握基于jedis操作redis *****
7、实现基于redis优化旅游网站首页导航栏展示和用户注册验证码保存功能 *****
文章源自JAVA秀-https://www.javaxiu.com/932.html
继续阅读
历史上的今天
1月
24
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
  • 版权声明:本站是JAVA秀团队的技术分享社区,我们会经常分享资源和教程。
  • 转载请注明:Redis实战教程 - JAVA秀 ☜(ˆ▽ˆ)
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定