Redis学习二、 基础篇 5大基本数据结构、数据库底层操作、持久化功能、主从模式,所有常用命令(全)

一、Redis数据结构

数据模型
Redis的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型 [1] 不仅限于字符串,还支持如下抽象数据类型:

  • 字符串列表
  • 无序不重复的字符串集合
  • 有序不重复的字符串集合
  • 键、值都为字符串的哈希表

值的类型决定了值本身支持的操作。Redis支持不同无序、有序的列表,无序、有序的集合间的交集、并集等高级服务器端原子操作。

redis支持的数据类型
keys:
给存储在redis内存中的数据起的变量名字
Values:
Strings (Binary-safe strings)
Lists (Lists of binary-safe strings)
Sets (Sets of binary-safe strings)
Sorted sets (Sorted sets of binary-safe strings)
Hash


结构类型结构存储的值结构的读写能力
String可以是字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)
List一个链表,链表上的每个节点都包含了一个字符串从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素
Set包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素
Hash包含键值对的无序散列表添加、获取、移除单个键值对;获取所有键值对
Zset字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

1、set的操作

在redis里边,除了==\n,空格==,不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字长度不做要求。
在这里插入图片描述
不同redis数据库切换:
在这里插入图片描述
最多有16个数据库供操作:
在这里插入图片描述

2、string字符串类型操作

String是redis最基本的类型
Redis的string可以包含任何数据。包括jpg图片或者序列化的对象。
单个value值最大上限是1G字节。
如果只用string类型,redis就可以被看作加上持久化特性的memcache
在这里插入图片描述
Incr: increament 增长
该指令可以对key进行累加操作,默认是累加1操作,类似i++操作
该指令可以针对新key或已有key进行操作
新key:创建该key并累加1,其值为1
已有key:key的信息值类型要求必须为整型的
(已有key的信息值类型要求必须为整型的)
在这里插入图片描述
Decr 的操作模式与incr一致,不过其实减1操作
Substr 对内容进行截取,包括start和end标记位置内容
在这里插入图片描述

3、List链表类型

List类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list即可以用作,也可以用作队列
上进下出:队列
上进上出:栈
在这里插入图片描述
该list链表类型应用场合:
      获得最新的10个登录用户信息:select * from user order by logintime desc limit 10;
      以上SQL语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或者logintime)设置索引,索引页比较耗费系统资源
      如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新的数据进来就删除一个旧数据。每次就可以从链表中直接或得需要的数据。极大节省各方面资源消耗
在这里插入图片描述
通过list链表保存登录系统的最新5个用户信息:、
Jim xiaoli jack xiaoming linken mary tom
设置一个list链表key newlogin,内部有5个元素:
在这里插入图片描述
该链表每添加一个新元素:
在这里插入图片描述
在这里插入图片描述
通过范围查找链表内部的全部元素信息:
在这里插入图片描述

4、set集合类型(Windows操作)

Redis的set是string类型的无序集合,
Set元素最大可以包含(2的32次方-1)个元素。
关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union)、交集(intersection)、差集(difference)。通过这些操作可以很容易的实现SNS中好友推荐功能。
注意:每个集合中的各个元素不能重复。
在这里插入图片描述
该类型应用场合:qq好友推荐。
Tom朋友圈(与某某是好友):Mary Jack 小明wang5 wang6
Linkken朋友圈(与某某是好友):yuejan daxiong luce wang5 wang6
在这里插入图片描述
创建tomFri的set集合类型数据,内部有5个元素:
在这里插入图片描述
再创建一个linkenFri的set集合key:
在这里插入图片描述
集合取交集、并集:
在这里插入图片描述
两个集合互取差集:
在这里插入图片描述
查看集合中是否含有这个元素:
在这里插入图片描述
计算元素个数、移动元素、查看元素、删除指定元素:
在这里插入图片描述

5、Sort Set排序集合类型

set一样,sorted set也是string类型元素的集合,
不同的是每个元素都会关联一个
通过权值可以有序的获取集合中的元素
该Sort set类型适合场合:
     获得热门帖子(回复量)信息:select * from message order by backnum desc limit 5;
     (以上需求可以通过简单SQL语句实现,但是SQL语句比较耗费mysql数据库资源)
在这里插入图片描述
案例:利用sort set实现获取最热门的前5贴的信息
在这里插入图片描述
排序集合中的每个元素都是值、权的组合
(之前的set集合类型每个元素就知识一个值)
在这里插入图片描述
我们只做一个sort set排序集合,里边值保留5个元素信息,该5个元素是回复量最高的
每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于集合,回复量最低的就被删除。

关于重复元素:
Set类型:没有
List链表类型:有
Sort set类型:没有

创建一个sort set排序集合hotmessage的key,内部有五个元素:
在这里插入图片描述
按照权值由高到低的顺序或得具体元素值的信息:
在这里插入图片描述
增加一个新元素,就删除一个旧元素(回复量最低的)
在这里插入图片描述
在这里插入图片描述

6、Hash(不大用)

Hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似。
在这里插入图片描述

二、持久化功能

Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。
数据保存到硬盘的过程就称为“持久化”效果。

1、 snap shotting快照持久化

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。
快照持久化在本地硬盘保留的数据备份文件:
在这里插入图片描述
快照持久化的备份频率(配置文件redis.conf):
在这里插入图片描述

1.1Redis持久化方式

  • Snapshotting(快照)方式
  • 默认的文件名为dump.Rdb
  • Save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
  • Save 300 10 #300秒超过10个key被修改,发起快照
  • Save 600 10000 #60秒超过10000个key被修改,发起快照
    以上三个save的意思
    数据修改的频率非常高,备份的频率也高
    数据修改的频率低,备份的频率也低

快照持久化文件的名字和存储位置:
(配置文件 redis.conf)
在这里插入图片描述
在这里插入图片描述

1.2手动发起快照持久化

手动发起快照持久化:
在这里插入图片描述

2、append only file(AOF持久化)

本质:把用户执行的每个指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。

开启AOF持久化(会清空redis内部的数据)
(配置文件 redis.conf)
(同时可以修改备份文件的名字,默认就是appendonly.aof)
在这里插入图片描述
配置文件被修改,需要删除旧进程,再根据新的配置文件启动新进程:
在这里插入图片描述
新进程启动好后会看到对应的aof持久化备份文件appendonlf.conf:
在这里插入图片描述
Aof追加持久化的备份频率:
在这里插入图片描述
Aof持久化:

  • Append-only file(缩写aof)的方式
  • Appendonly 也是 //启用aof持久化方式
  • Appendfilename appendonly。Aof //保存命令的文件
appendfsync always 		//每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
Appendfsync everysec 	//每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
Appendfsync no			//完全依赖os,性能最好,持久化没保证 

2.1 为aof备份文件做优化处理

对sppendonly.conf文件做优化压缩处理:
(例如多个incr指令变为一个set指令)
在这里插入图片描述
3、redis持久化相关操作指令:

bysave 异步保存数据到磁盘(快照保存)
lastsave 返回上次成功保存到磁盘的Unix时间戳
shutdown 同步保存到服务器并关闭redis服务器
bgrewriteaof 当日志文件过长时优化AOF日志文件存储

./redis-cli bgrewriteaof
./redis-cli bgsave
./redis-cli -h 127.0.0.1 -p 6379 bgsave  #手动发起快照

三、主从模式

为了降低每个日的收服务器的堵在,可以多设置几个,并做主从模式
一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据
主服务器数据会“自动”同步给从服务器
在这里插入图片描述
配置redis.conf文件,称为192.168.39.159的从服务器:
之后文件保存退出,杀死旧的redis进程,启动新的redis进程
在这里插入图片描述
在这里插入图片描述
从服务器默认禁止写入操作;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java冯坚持

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值