Redis简介与Resid的数据存储格式简单使用

Redis简介与Resid的数据存储格式简单使用

引入 Redis:我们使用MySql存在一些问题现象

为什么要使用NOSQL

具体表现为对如下三高问题的解决:

High Performance - 数据库高并发访问

​ 在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。

  • 如天猫的双11,从凌晨0点到2点这段时间,每秒达到上千万次的访问量。
  • 12306春运期间,过年回家买火车抢票的时间,用户不断查询有没有剩余票。
Huge Storage - 海量数据的存储

​ 数据库中数据量特别大,数据库表中每天产生海量的数据。

​ 类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。

High Scalability && High Availability- 高可扩展性和高可用性的需求

​ 关系型数据库进行扩展和升级是比较麻烦的一样事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

​ 非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EprPcvs1-1593670948503)(C:\Users\93422\AppData\Roaming\Typora\typora-user-images\1593663867071.png)]

什么是NOSQL

NoSQL概念

Not Only SQL:不仅仅是SQL,指的就是非关系型数据库,它是关系型数据库有益的补充。最终的数据还是保存在关系型数据库中。非关系型数据库主要是提升数据库的查询速度,一般做为数据的缓存来使用。

非关系型数据库

在这里插入图片描述

​ 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

优点
  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  2. 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
  3. 成本低:nosql数据库部署简单,基本都是开源软件。
缺点
  1. 不提供sql支持,学习和使用成本较高;
  2. 数据结构相对复杂,复杂查询方面不方便。

Redis的使用

Redis介绍

概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:

  1. 数据间没有必然的关联关系
  2. 内部采用单线程机制进行工作
  3. 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
  4. 多数据类型支持
    ◆ 字符串类型 string
    ◆ 列表类型 list
    ◆ 散列类型 hash
    ◆ 集合类型 set
    ◆ 有序集合类型 zset/sorted_set
  5. 支持持久化,可以进行数据灾难恢复
Redis 的应用

⚫ 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
⚫ 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
⚫ 时效性信息控制,如验证码控制、投票控制等
⚫ 分布式数据共享,如分布式集群架构中的 session 分离
⚫ 消息队列

Redis的下载

  • 官网提供了Linux版的Redis下载

    http://redis.io/download

  • Windows版的Redis,下载地址如下:

    https://github.com/MSOpenTech/redis/tags

Redis的目录文件

目录或文件作用
redis-benchmark.exe用于性能测试一个工具命令
redis-check-aof.exeAOF文件的检查和修复工具 (AOF是它的一种文件存储格式)
redis-check-dump.exeRDB文件的检查和修改工具 (RDB是它的一种文件存储格式)
redis-cli.exe客户端启动程序
redis-server.exe服务器端启动程序 (不会自动启动,默认每次都要手动开启)
redis.window.conf服务器配置文件

Resid的数据存储格式

Redis数据存储格式

⚫ redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
⚫ 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

Redis的5种数据类型

redis是一种高级的key-value的存储系统,其中value支持五种数据类型,指的是它值的类型,键可以认为是字符串类型。redis不是用Java写的,是C语言写的。

值的数据类型说明
string类型字符串
list类型列表:元素可以重复,元素是有索引号,有先后顺序的
set类型集合:元素是不可重复的,元素没有索引号,没有先后顺序的
hash类型值由多个键值对组成
zset类型集合:元素不可重复的,每个元素有索引号,还有一个分数值,可以根据分数进行排序

字符串类型string

在Redis中以二进制保存,没有编码和解码的过程。

无论存入的是字符串、整数、浮点类型都会以字符串写入。

在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型。

常用命令

命令功能
set 键 值存入字符串类型的键和值,如果键不存在就是添加,存在就是修改
setnx 键 值键不存在就是添加,存在不做任何操作,不会覆盖以前的键和值
get 键通过键获取值
del 键通过键删除键和值

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

string 类型数据操作的注意事项

  1. 数据操作不成功的反馈与数据正常操作之间的差异
    ◆ 表示运行结果是否成功
    ⚫ (integer) 0 → false 失败
    ⚫ (integer) 1 → true 成功
    ◆ 表示运行结果值
    ⚫ (integer) 3 → 3 3个
    ⚫ (integer) 1 → 1 1个
  2. 数据未获取到时,对应的数据为(nil),等同于null
  3. 数据最大存储量:512MB
  4. string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算
  5. 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错
    9223372036854775807(java中Long型数据最大值,Long.MAX_VALUE)
  6. redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响

hash 类型

在这里插入图片描述

上面图的存储格式和java中的Map嵌套Map很像

Map<String,Map<String,String>>

⚫ 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
⚫ 需要的存储结构:一个存储空间保存多个键值对数据
⚫ hash类型:底层使用哈希表结构实现数据存储

在这里插入图片描述

常用命令

命令功能
hset 键 值存入字符串类型的键和值,如果键不存在就是添加,存在就是修改
hsetnx 键 值键不存在就是添加,存在不做任何操作,不会覆盖以前的键和值
hget 键通过键获取值
hdel 键通过键删除键和值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

hash 类型数据操作的注意事项

  1. hash类型中value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
  2. 每个 hash 可以存储 2
    32 - 1 个键值对
  3. hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计
    的,切记不可滥用,更不可以将hash作为对象列表使用
  4. hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

list 类型

概述

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。

在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。

如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。

List中可以包含的最大元素数量是4G个(41亿个)

list 类型存储结构

⚫ 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
⚫ 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
⚫ list类型:保存多个数据,底层使用双向链表存储结构实现

在这里插入图片描述

常用命令

命令行为
lpush 键 元素 元素从左边添加1个或多个元素
rpush 键 元素 元素从右边添加1个或多个元素
lpop 键删除最左边的一个元素,并且返回
rpop 键删除最右边的一个元素,并且返回
lrange 键 开始 结束查找指定索引范围内元素返回,每个元素有2个索引号
索引号从左向右:0~length-1
索引号从右向左:-1~-length
如果要获取整个列表中所有的元素,索引号范围如何写?0~-1
llen 键获取列表中有多少个元素

在这里插入图片描述
在这里插入图片描述

list 类型数据操作注意事项

  1. list中保存的数据都是string类型的,数据总容量是有限的,最多2
    32
  • 1 个元素 (4294967295)。
  1. list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
  2. 获取全部数据操作结束索引设置为-1
  3. list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载

set 类型

⚫ 新的存储需求:存储大量的数据,在查询方面提供更高的效率
⚫ 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
⚫ set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复
在这里插入图片描述

常用命令

命令功能
sadd 键 值…设置键并设置值,键存在就在后面添加值
smembers 键通过键获取全部值
srem键通过键删除键和值

在这里插入图片描述
在这里插入图片描述

set 类型数据操作的注意事项

⚫ set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
⚫ set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值