Redis基础

本片文章行文思路:

 

 

1 redis 是一个什么东西,概念是什么?

redis 是一个远程 内存 非关系型数据库,提供了不同的数据结构【主要是5钟】,各种问题也就映射到这五种数据结构上解决。

可以存储key与其他不同类型的value 的映射,可以将存储在内存上的键值对持久化到硬盘上,可以通过使用复制特性来扩展读性能,可以使用客户端分片扩展写性能

2 redis 数据结构什么样的?

首先要说明一点的是此处的数据结构指的是存储的值 [value] 的数据结构,此处只讲基本的五种,随着redis 的发现,也有其他的数据类型出现,可以去官网关注。

下面用图的形式表示一下几种结构:

结构类型

结构存储的值

结构的读写能力

应用场景

Hash  【散列】值本身也是一个键值对,无需的添加,获取,移除单元素,获取所有键值对1 保存结构体,将每个字段分开传,取的时候就可以只取需要的字段了。
 List   【列表】是一个链表,链表节点上存储的是一个字符串从链表的两端推入或者弹出元素,根据偏移量进行修剪[trim] ,读取单个或者多个元素,根据值查找或者移除元素

1 异步队列使用【将需要延后处理的任务结构体序列化成字符串进redis 的列表,另一个线程从这个列表中轮询数据进行处理】

2 秒杀场景,秒杀前将本场秒杀的商品放到list中,因为list的pop操作是原子性的,所以即使有多个用户同时请求,也是依次pop,list空了pop抛出异常就代表商品卖完了

Set     【集合】字符串,无序的,各不相同的添加,获取,移除单元素,检测是否存在元素,计算交集,并集,差集,从集合里随机获取元素1 不可重复,但是value可以为null ,用在一些去重的场景,比如用户只能参加一次活动,一个用户只能中一次奖等等去重场景。
String【字符串】可以是字符串,整数或者浮点数对整个字符串或者字符串的一部分进行操作。对整数或者浮点数执行自增 [increment] 或者自减 [decrement] 操作

1 缓存结构体信息【将结构体信息json序列化成一个字符串】

2 计数功能

ZSet   【有序集合】字符串,浮点数与分值之间的一个映射,顺序由分值大小决定添加,获取,移除单元素,更具分值范围或者成员来获取元素1 各类排序场景:歌曲排行榜,播放次数,播放数,点赞数等等需要排序的场景。


 

  

 

 

3 redis 持久化方式

redis 提供了两种不同的持久化方法来将数据持久化到硬盘里。

第一种:快照方法 [snapshotting]

它可以将存在于某个时刻的所有数据都写入到硬盘里。

  创建快照的方式:客户端向redis 发送 bgsave 命令来创建,或者发送save 命令。两者的差别在于 bgsave 是创建一个子进程,子进程负责将快照写入硬盘,父进程继续处理命令请求。而save通常是没有足够内存的时候使用的,接收到save 命令时服务器在创建完快照之前,将不再响应任何命令;还有一些是redis 接受到关闭服务器等的命令时,执行save 命令;一个redis 接收到另一个redis服务器的同步命令时,主服务器会执行 bgsave 命令。

使用快照方式持久命令的时候,因为记录的是某个时间点的快照,所以如果系统崩溃,用户将失去最后一次生成快照之后的数据。所以快照持久化方式只适合于那些即使丢失一部分数据也不会造成问题的应用程序。

 

第二种:只追加文件 [append-only-file,AOF]

AOF 持久化会将被执行的写命令写到AOF 文件的末尾。以此来记录数据发生的变化。所以只要从头执行到尾,也就能恢复数据了。每个redis的写命令都会被写入硬盘,从而系统崩溃时数据丢失能减到最小。但这种方式需要对硬盘进行大量写入,所以redis 处理命令的速度受硬盘性能的限制。转盘式硬盘每秒能处理大概200个命令,固态硬盘每秒大概能处理几万个命令。

 写命令同步频率也是可以调整的【appendfsync】:

选项

同步频率

always每个redis 写命令都哟啊同步写入硬盘,这样做会严重降低redis 的速度
everysec每秒执行一次同步,显示地将多个写命令同步到硬盘
no让操作系统决定应该何时进行同步

 

AOF 持久化缺点:追加的话AOF 的文件体积比较大。

1 Redis不断地将被执行的写命令记录到AOF文件里面,所以随着 Redis不断运行,AOF文件的体积也会不断增长,在极端情况下,体积不断增大的AOF文件甚至可能会用完硬盘的所有可用空间。

2 还有另一个问题就是,因为 Redis在重启之后需要通过重新执行AOF文件记录的所有写命令来还原数据集,所以如果AOF文件的体积非常大,那么还原操作执行的时间就可能会非常长。

解决:

向 Redis发送 BGREWRITEAOF命令,这个命令会通过移除AOF文件中的冗余命令来重写( rewrite)AOF文件,使OF文件的体积变得尽可能地小 BGREWRITEAOF的工作原理和 BGSAVE创建快照的

工作原理非常相似: Redis会创建一个子进程,然后由子进程负责对AOF文件进行重写。

 

持久化到硬盘上还不够,备份到多个不同的地方才足够安全。

两种方法可以同时使用,也可以单独使用,

为什么要将内存中的数据存储到硬盘上?

一方面是防止系统故障而将数据进行备份。另一方面是有些数据是经过大量计算得到的,存储起来之后使用就不用重新计算了。

 

4 复制特性

作用:可以让其他服务器拥有一个不断地更新的数据副本,从而使得拥有数据副本的服务器可以用于处理客户端发送的读请求。在需要扩展读请求的时候,或者在需要写入临时数据的时候,用户可以通过设置额外的 Redis从服务器来保存数据集的副本。在接收到主服务器发送的数据初始副本之后,客户端每次向主服务器进行写入时,从服务器都会实时地得到更新。

复制过程:

 

5 redis 的锁功能与典型的加锁功能的区别

redis:

MULTI:标记一个事务块的开始

EXEC:执行所有事务块内的命令

WATCH: 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

UNWATCH: 放弃本次监控,重新获值再去修改

 

WATCH命令监控一个key,然后MULTI ,EXEC将需要在同一个事务里的命令包裹。如果监控到key 被另外的事务改变时,则UNWATCH。偏向于乐观锁

值得注意的是:redis对事务是部分支持。是全部执行,而没有要求全部执行成功,中途有命令执行错误了,其他不影响。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值