Redis 缓存数据库

redis 中文网

http://www.redis.cn/

redis.net.cn

两种数据库阵营

1.关系型数据库

MySQL

Oracle

DB2

SQL Server

等基于二维表结构存储数据的文件型磁盘数据库

缺点: 因为数据库的特征是磁盘文件型数据库, 就造成每次查询都有IO操作, 海量数据查询速度较慢

2.NoSQL数据库 (Not Only SQL)

Redis

MongoDB

等基于 key value 结构存储数据的内存数据库

优点: 因为数据库的特征是内存型数据库, 数据查询不需要进行文件IO操作, 因此这种数据库的读写速度极快

下载安装

redis 是使用C语言写的, 所以安装的时候必须先安装 C 语言编译环境, 就好比安装Java软件必须先安装JDK一样

## 下载

yum -y install wget

wget http://download.redis.io/releases/redis-6.0.6.tar.gz

## 安装C语言环境

yum -y install gcc-c++

yum -y install pcre pcre-devel

yum -y install zlib zlib-devel

yum -y install openssl openssl-devel

## 解决redis6.x以上版本gcc版本不匹配问题 (只有安装redis6.x以上版本需要, 5.x以下版本不需要)

yum -y install centos-release-scl && yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils && scl enable devtoolset-9 bash

## 下载redis安装包 (这是一个c语言的源代码压缩包)

wget http://download.redis.io/releases/redis-6.0.6.tar.gz

## 解压缩tar -xvf redis-6.0.6.tar.gz

## 进入redis-6.0.6 进行代码编译cd redis-6.0.6

## 编译make

Redis配置文件

在redis安装目录的根目录中有一个文件叫 redis.conf 是redis缓存数据库的核心配置文件

修改配置文件

# 69行处, 设置了Redis服务与本机回环地址绑定, 只有本机可以访问, 这样其他机器无法访问, 取消注释即可让其他机器访问

# bind 127.0.0.1

# 88行处, 默认开启了Redis保护模式, 也是阻止其他机器来连接的, 这里关闭保护模式

protected-mode no

# 92行处, 设置了Redis默认的端口号是6379

port 6379

# 222行处, 设置Redis默认是前台运行的进程, 改为后台运行

daemonize yes

# 272 行处, 设置了Redis默认创建16个仓库, 仓库名分别为 0-15

databases 16

# 786行处, 默认是没有连接密码的, 这里可以设置一个连接密码, 取消注释

requirepass 12345

Redis 服务启动脚本

在redis安装目录的根目录中有一个src目录中有一个redis-server脚本是Redis服务启动脚本

启动Redis服务, 并读取配置文件

./src/redis-server redis.conf

Redis 命令行客户端启动脚本

在redis安装目录的根目录中有一个src目录中有一个redis-server脚本是Redis命令行客户端启动脚本

启动Redis命令行客户端, 连接Redis服务

./src/redis-cli -h localhost

输入密码

退出连接

如果密码显示没有设置

./src/redis-cli 查看视口开启redis

leys * 查看是否配置密码

config set requirepass 123456重新配置密码

Redis 数据

Redis数据库中所有的数据都是key -> value结构

key 全部是字符串类型

key是字符串类型,作用是类似于变量名,不允许重复

那么5种数据类型指的是Redis数据库中 value 的数据类型

操作key的相关命令

操作五种value相关指令

value是String字符串类型相关命令

value是Hash哈希类型相关命令

value是List列表类型相关命令

value是Set集合类型相关命令

value是SortedSet有序集合类型相关命令

Java 操作Redis缓存数据库 (基于SpringBoot)

创建SpringBoot工程, 安装依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

RedisTemplate对象和StringRedisTemplate对象

当我们安装了redis启动器依赖后

我们可以在Controller层或者Service层任何类中通过@Autowired注解组装一个redis操作对象

该对象有两种类型,都可以使用

  • RedisTemplate
  • StringRedisTemplate

@Autowired

StringRedisTemplate stringRedisTemplate;

StringRedisTemplate对象

stringRedisTemplate.opsForValue(); // 返回一个操作String类型的对象

stringRedisTemplate.opsForHash(); // 返回一个操作Hash类型的对象

stringRedisTemplate.opsForList(); // 返回一个操作List类型的对象

stringRedisTemplate.opsForSet(); // 返回一个操作Set类型的对象

stringRedisTemplate.opsForZSet(); // 返回一个操作ZSet类型的对象

检查redis服务器防火墙是否关闭

systemctl status firewalld

防火墙命令

关闭防火墙命令:systemctl stop firewalld.service

开启防火墙:systemctl start firewalld.service

关闭开机自启动:systemctl disable firewalld.service

开启开机启动:systemctl enable firewalld.service

Redis的持久化方式RDB和AOF

RDB和AOF介绍

RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化)

AOF持久化(原理是将Reids的操作日志以追加的方式写入文件)

二者的区别

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

二者优缺点

RDB存在哪些优势呢?

1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。

2). 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。

3). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

4). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。

RDB又存在哪些劣势呢?

1). 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

AOF的优势有哪些呢?

1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。

2). 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。

3). 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。

4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。

AOF的劣势有哪些呢?

1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。

二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)。rdb这个就更有些 eventually consistent的意思了。不过生产环境其实更多都是二者结合使用的。

常用配置

RDB持久化配置#304行

Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:

save 900 1              #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。

save 300 10            #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

AOF持久化配置#1088行

在Redis的配置文件中存在三种同步方式,它们分别是:

appendfsync always     #每次有数据修改发生时都会写入AOF文件。

appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。

appendfsync no          #从不同步。高效但是数据不会被持久化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源

文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront&#xff08;CDN&#xff09;的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源&#xff0c;而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…

137 Linux 系统编程14 ,gdb对于父子进程的调试,exec函数族原理分析

一 gdb 对于 父子进程的 调试 使用gdb调试的时候&#xff0c;gdb只能跟踪一个进程。可以在fork函数调用之前&#xff0c;通过指令设置gdb调试工具跟踪父进程或者是跟踪子进程。默认跟踪父进程。 set follow-fork-mode child 命令设置gdb在fork之后跟踪子进程。 set follow-…

深度学习--神经网络基础

神经网络 人工神经网络&#xff08; Artificial Neural Network &#xff0c; 简写为 ANN &#xff09;也简称为神经网络&#xff08; NN &#xff09;&#xff0c;是一种模仿生物神经网络结构和 功能的计算模型 。人脑可以看做是一个生物神经网络&#xff0c;由众多的 神经元…

时间管理大师速成(程序员版)

01 时间管理的重要性 管理时间有几个主要的原因&#xff1a; 时间和生活质量&#xff1a;时间是我们拥有的最宝贵的资源之一&#xff0c;管理好时间会直接影响我们的生活质量。高效的时间管理可以让我们开展日常活动&#xff0c;实现目标&#xff0c;并拥有休闲和休息的时间。 …

OpenMLDB v0.8.5 发布:认证功能完善,安全升级全面实施

发布日期 27 February 2024 Release note https://github.com/4paradigm/OpenMLDB/releases/tag/v0.8.5 Highlights 增加 Apache Iceberg 离线存储引擎集成&#xff0c;支持导入数据&#xff0c;导出特征计算数据等功能&#xff0c;进一步加强生态集成。增加标准 SQL 语法…

Linux alias命令(为复杂命令创建别名,其中命令可带选项或参数)

文章目录 Mastering the Linux alias Command&#xff08;精通Linux的alias命令&#xff09;1. Understanding the alias Command&#xff08;理解alias命令&#xff09;示例Ubuntu20.04 arm操作系统OpenEuler20.03 arm操作系统 2. Basic Usage of alias&#xff08;alias的基本…

抖音商品详情数据API接口采集(属性,主图,价格,sku等)item_get-获得抖音商品详情

item_get-获得抖音商品详情 douyin.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥WeChat18305163218api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,i…

什么是企业架构?企业架构有什么具体作用?实施企业架构的条件是什么?

&#xff08;一&#xff09;什么是企业架构 企业架构是一种系统思考的方法&#xff0c;旨在帮助企业理解、设计和管理复杂的业务和技术系统。 企业架构的核心概念是将企业视为一个由多个相互关联的组成部分构成的系统&#xff0c;这些组成部分包括业务、数据、应用和技术&…

python自动化管理和zabbix监控网络设备(无线AC控制瘦ap配置部分)

目录 前言 拓扑 一、AC-SW1 二、Core-sw1 三、Core-sw2 四、汇聚层 五、AC1 六、SW1-6 七、DMZ区域 前言 具体原理和操作可以访问我的主页视频 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 拓扑 一、AC-SW1 sys sysname AC-SW1 vlan batch 100 200 210 220 2…

国产新能源车确立全球领先地位 珠光材料等上游产业链亦乘风而起

农历新年伊始&#xff0c;中国新能源汽车的老大哥比亚迪率先开启了一波降价狂潮&#xff0c;比亚迪秦PLUS荣耀版、驱逐舰05荣耀版正式上市&#xff0c;相较于上一版本冠军版车型&#xff0c;两款新版本车型价格均下降了2万元至7.98 万元起售&#xff0c;堪称王炸出牌。当天&…

CancerSubtypes包(多种肿瘤分型方法)

CancerSubtypes: an R/Bioconductor package for molecular cancer subtype identification, validation and visualization 介绍 该包是2017年发表的已经很久了&#xff0c;但其涵盖的几种分型方法比较经典。 开发背景&#xff1a;cancer subtype R包&#xff0c;该包使用…

C++初阶:0_前言

前言 一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(ob…