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

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

时间:2022-12-30 18:01:23浏览次数:37  
标签:set 持久 Redis 元素 redis 链表 key 常用命令 主从


一、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学习二、 基础篇 5大基本数据结构、数据库底层操作、持久化功能、主从模式,所有常用命令(全)_数据


不同redis数据库切换:

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


最多有16个数据库供操作:

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

2、string字符串类型操作

String是redis最基本的类型

Redis的string可以包含任何数据。包括jpg图片或者序列化的对象。

单个value值最大上限是1G字节。

如果只用string类型,redis就可以被看作加上持久化特性的memcache

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


Incr: increament 增长

该指令可以对key进行累加操作,默认是累加1操作,类似i++操作

该指令可以针对新key或已有key进行操作

新key:创建该key并累加1,其值为1

已有key:key的信息值类型要求必须为整型的

(已有key的信息值类型要求必须为整型的)

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


Decr 的操作模式与incr一致,不过其实减1操作

Substr 对内容进行截取,包括start和end标记位置内容

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

3、List链表类型

List类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list即可以用作,也可以用作队列

上进下出:队列

上进上出:栈

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


该list链表类型应用场合:

      获得最新的10个登录用户信息:select * from user order by logintime desc limit 10;

      以上SQL语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或者logintime)设置索引,索引页比较耗费系统资源

      如果通过list链表实现以上功能,可以在list链表中只保留最新的10个数据,每进来一个新的数据进来就删除一个旧数据。每次就可以从链表中直接或得需要的数据。极大节省各方面资源消耗

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


通过list链表保存登录系统的最新5个用户信息:、

Jim xiaoli jack xiaoming linken mary tom

设置一个list链表key newlogin,内部有5个元素:

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


该链表每添加一个新元素:

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


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


通过范围查找链表内部的全部元素信息:

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

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

Redis的set是string类型的无序集合,

Set元素最大可以包含(2的32次方-1)个元素。

关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union)、交集(intersection)、差集(difference)。通过这些操作可以很容易的实现SNS中好友推荐功能。

注意:每个集合中的各个元素不能重复。

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


该类型应用场合:qq好友推荐。

Tom朋友圈(与某某是好友):Mary Jack 小明wang5 wang6

Linkken朋友圈(与某某是好友):yuejan daxiong luce wang5 wang6

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


创建tomFri的set集合类型数据,内部有5个元素:

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


再创建一个linkenFri的set集合key:

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


集合取交集、并集:

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


两个集合互取差集:

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


查看集合中是否含有这个元素:

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


计算元素个数、移动元素、查看元素、删除指定元素:

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

5、Sort Set排序集合类型

set一样,sorted set也是string类型元素的集合,

不同的是每个元素都会关联一个

通过权值可以有序的获取集合中的元素

该Sort set类型适合场合:

     获得热门帖子(回复量)信息:select * from message order by backnum desc limit 5;

     (以上需求可以通过简单SQL语句实现,但是SQL语句比较耗费mysql数据库资源)

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


案例:利用sort set实现获取最热门的前5贴的信息

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


排序集合中的每个元素都是值、权的组合

(之前的set集合类型每个元素就知识一个值)

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


我们只做一个sort set排序集合,里边值保留5个元素信息,该5个元素是回复量最高的

每个帖子被回复的时候,都有机会进入该集合里边,但是只有回复量最高的前5个帖子会存在于集合,回复量最低的就被删除。

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

创建一个sort set排序集合hotmessage的key,内部有五个元素:

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


按照权值由高到低的顺序或得具体元素值的信息:

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


增加一个新元素,就删除一个旧元素(回复量最低的)

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


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

6、Hash(不大用)

Hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似。

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

二、持久化功能

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

1、 snap shotting快照持久化

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。

快照持久化在本地硬盘保留的数据备份文件:

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


快照持久化的备份频率(配置文件redis.conf):

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

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)

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


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

1.2手动发起快照持久化

手动发起快照持久化:

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

2、append only file(AOF持久化)

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

开启AOF持久化(会清空redis内部的数据)

(配置文件 redis.conf)

(同时可以修改备份文件的名字,默认就是appendonly.aof)

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


配置文件被修改,需要删除旧进程,再根据新的配置文件启动新进程:

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


新进程启动好后会看到对应的aof持久化备份文件appendonlf.conf:

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


Aof追加持久化的备份频率:

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


Aof持久化:

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

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

对sppendonly.conf文件做优化压缩处理:

(例如多个incr指令变为一个set指令)

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


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学习二、 基础篇 5大基本数据结构、数据库底层操作、持久化功能、主从模式,所有常用命令(全)_redis_39


配置redis.conf文件,称为192.168.39.159的从服务器:

之后文件保存退出,杀死旧的redis进程,启动新的redis进程

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


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


从服务器默认禁止写入操作;

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


标签:set,持久,Redis,元素,redis,链表,key,常用命令,主从
From: https://blog.51cto.com/u_15926676/5981054

相关文章

  • SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
    一、前言在面试中,经常会有一道经典面试题,那就是:怎么防止接口重复提交?小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重视。最近......
  • docker基础之常用命令(二)
    重要概念:镜像、容器镜像:可以理解为软件安装包,可以方便的进行传播和安装。容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。Docker关系图(简):  ......
  • Linux搭建ELK+Filebeat+Redis分布式日志管理平台
    ELK介绍需求背景业务发展越来越庞大,服务器越来越多各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志开发人员排查问题,需要到服务器上查日志,不......
  • Linux一键部署ELK+Filebeat+Nginx+Redis日志平台自动化脚本
    此脚本是Linux一键部署ELK+Filebeat+Nginx+Redis日志平台自动化脚本,有需要朋友可以参考,脚本内容如下:环境准备操作系统:CentOSLinuxrelease7.8.2003软件版本Elasticsearch:e......
  • Linux搭建ELK+Filebeat+Nginx+Redis分布式日志管理平台
    ELK介绍需求背景业务发展越来越庞大,服务器越来越多各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志开发人员排查问题,需要到服务器上查日志,不......
  • Zabbix监控Redis性能状态
    Zabbix监控Redis性能状态监控原理示意图:监控原理Zabbix-server通过agent监控中配置文件调用shell脚本。Redis中提供redis-cli命令使用info可以获得redis大部分信息。在使用......
  • Tomcat 8.x基于Redis Session会话保持
    什么是Redis?Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。一、与其他用户状态保存方案比较一般开......
  • Docker 安装 Redis
    Docker安装RedisRedis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的NoSQL数据库,并提供多种语言的API。Redis是一个开源(BSD许......
  • 使用redisTemplate时,Lists和Sets报错
    在使用RedisUtils工具类的时候,Lists和Sets报错,原因是由于缺少谷歌的依赖,只需要添加对应的依赖即可1<dependency>2<groupId>com.google.guava</groupId>3......
  • Redis源码剖析系列博文开篇&大纲
    今年我启动了好几个比较有挑战的个人项目,比如写一门编程语言、成为一名视频UP主、写科幻小说……这些项目目前进度都很堪忧,一方面这些项目挑战都比较大,另一方面业余时间还......