探索 Redis 数据库:一款高性能的内存键值存储系统

目录

引言

一、非关系型数据库

(一)什么是非关系型数据库

(二)非关系型数据库的主要特征

(三)关系数据库与非关系型数据库的区别

二、Redis 简介

(一)基本信息

(二)数据模型与操作命令

(三)Redis 的特性与优势

(四)Redis实际应用中的案例

(五)安装部署Redis


引言

随着互联网技术的发展,对于数据存储和处理的效率要求越来越高。Redis,作为一种高性能、开源的内存键值存储系统,凭借其独特的优势,在众多数据库中脱颖而出,成为许多大型网站和应用首选的缓存及数据存储解决方案。

一、非关系型数据库

(一)什么是非关系型数据库

非关系型数据库(Non-relational Database)又称NoSQL数据库是一种不同于传统关系型数据库管理系统(RDBMS)的数据存储解决方案。NoSQL这个术语最初意味着"Not Only SQL",强调的是这类数据库不完全依赖于SQL作为查询语言,并且通常不遵循关系模型的设计原则。

(二)非关系型数据库的主要特征

非关系型数据库的主要特征包括:

数据模型多样性

键值对存储(Key-Value Store):如Redis,通过键快速检索对应的值。

文档型数据库(Document-Oriented):如MongoDB,存储类似JSON或XML格式的文档集合,每个文档有自己的内部结构。

列族数据库(Column-Family):如Cassandra和HBase,以列簇为单位存储数据,适合大量数据的分布式存储和分析。

图形数据库(Graph Database):如Neo4J,关注实体间复杂关系的建模和查询。

灵活性:非关系型数据库允许更灵活的数据模型,能够轻松应对不断变化的应用需求,特别是在需要水平扩展时。

可扩展性与分布式计算:多数NoSQL数据库设计之初就考虑到横向扩展(Scale-out),可以在多个节点间分布数据和负载,从而处理海量数据和高并发请求。

弱一致性与CAP定理:很多NoSQL系统在设计上选择了可用性与分区容错性优先于强一致性,提供了最终一致性保证,而非传统RDBMS的ACID事务。

性能优化:某些非关系型数据库通过减少冗余、利用数据局部性以及针对特定场景优化数据结构和算法,提高了读写性能

(三)关系数据库与非关系型数据库的区别

区别类型关系型数据库非关系型数据库
数据存储

数据通常按照预定义的

模式存储,并进行增删改

数据可以按需存储,无需预先定义严格的模式
数据查询

使用结构化查询语言(SQL)

进行数据查询

不一定使用SQL作为查询语言NoSQL数据库支持自定义

查询语法,有的则提供了API接口进行数据操作

扩展方式

纵向,可通过扩展硬件向上

提高性能

横向,天然分布式,通过给资源池添加更多普通的数据库

服务器(节点)来分担负载

事务支持支持,性能强,稳定支持,稳定性较弱
适用场景

用于高度结构化的数据、需要

强事务支持和复杂查询的场景,

如ERP系统、银行系统等。

适用于大数据处理、实时分析、内容管理系统、社交媒

体平台等需要快速存储和检索大量半结构化或非结构化

数据的场景。

主流软件Oracle、MySQL、PostgreSQL等Redis、MongBD、Hbase、Memcached等

二、Redis 简介

(一)基本信息

Redis 全称 Remote Dictionary Server(远程字典服务器),由 Salvatore Sanfilippo(网名 antirez)开发并维护。它不仅支持丰富的数据结构(字符串、哈希表、列表、集合、有序集合等),还提供了持久化、发布/订阅、Lua脚本、事务等多种功能特性。Redis 的核心价值在于将所有数据存储在内存中,从而实现超高的读写速度,是典型的内存数据库代表

(二)数据模型与操作命令

Redis支持多种数据结构,这使得它能灵活地处理不同类型的数据和场景

键值对(Strings):简单的字符串类型,可以进行 GET、SET、INCR 等操作。

哈希表(Hashes):内含多个字段的键值对集合,例如存储用户信息。

列表(Lists):有序的字符串列表,可用于消息队列或者粉丝列表。

集合(Sets):无序且不允许重复元素的集合,常用于标签系统、好友列表等。

有序集合(Sorted Sets):具有排序特性的集合,每个成员有分数属性,可用于排行榜、带权重的索引等。

(三)Redis 的特性与优势

高速性能:Redis 将数据存储在内存中,通过避免磁盘 I/O 操作,实现了微秒级别的延迟。

持久化:虽然Redis 是内存数据库,但它提供了 RDB 快照和 AOF 日志两种持久化机制,确保即使在服务器宕机后也能恢复数据。

集群与分布式:Redis 集群可以通过分片(Sharding)方式实现大规模数据的分布式存储和处理,同时支持主从复制(Replication)提高系统的可用性和可靠性。

实时性:Redis 支持发布/订阅模式,可在多个客户端之间实现实时的消息传递。

安全性:Redis 提供了访问控制、过期策略等功能,保障了数据的安全使用。

(四)Redis实际应用中的案例

Redis 在社交网络、游戏、电子商务、内容缓存等多个领域有着广泛的应用。例如,在社交网络中,它可以用来存储用户的在线状态、最新动态等实时数据;在电商系统中,Redis 可以作为商品浏览记录、购物车等热数据的缓存;在游戏服务端,Redis 可用作积分排行榜、玩家状态存储等。

(五)安装部署Redis

[root@localhost ~]#yum install -y gcc gcc-c++ make
#安装编译环境
[root@localhost opt]#ls /opt
redis-5.0.7.tar.gz
[root@localhost opt]#tar xf /data/redis-5.0.7.tar.gz
#解压源码包
[root@localhost opt]#ls
redis-5.0.7  redis-5.0.7.tar.gz
[root@localhost opt]#cd  /opt/redis-5.0.7/
[root@localhost redis-5.0.7]#ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-moduleapi  src
BUGS             deps     MANIFESTO  runtest          runtest-sentinel   tests
CONTRIBUTING     INSTALL  README.md  runtest-cluster  sentinel.conf      utils
#因为源码包中自带Makefile文件,所以不需要执行configure命令,直接执行make命令即可
[root@localhost redis-5.0.7]#make  -j 4
#进行编译
[root@localhost redis-5.0.7]#make PREFIX=/usr/local/redis  install
#安装redis

安装完redis之后,需要执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件

Selected config:
Port           : 6379								#默认侦听端口为6379
Config file    : /etc/redis/6379.conf				#配置文件路径
Log file       : /var/log/redis_6379.log			#日志文件路径
Data dir       : /var/lib/redis/6379				#数据文件路径
Executable     : /usr/local/redis/bin/redis-server	#可执行文件路径
Cli Executable : /usr/local/bin/redis-cli			#客户端命令工具

[root@localhost utils]#ln -s /usr/local/redis/bin/* /usr/local/bin/
#把redis的可执行程序文件放入路径环境变量的目录中,便于直接使用命令
[root@localhost utils]#ss -natp |grep redis
LISTEN     0      128    127.0.0.1:6379                     *:*                   
users:(("redis-server",pid=22803,fd=6))
当 install_server.sh 脚本运行完毕,Redis服务就已经启动,默认监听端口为6379


#Redis服务的启动与停止命令在/etc/init.d/redis_6379
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status			#状态

到目前位置,redis的服务已经安装完毕,可以对一些基本配置与文件存放位置进行修改

第70行:bind 127.0.0.1                    #Redis服务器绑定的IP地址
第93行:port 6379                         #Redis服务器监听的端口号
第137行:daemonize yes                    #是否以守护进程方式运行Redis服务器
第159行:pidfile /var/run/redis_6379.pid  #Redis服务器的PID文件路径
第167行:loglevel notice                  #日志记录级别
第172行:logfile /var/log/redis_6379.log  #Redis服务器的日志文件路径

如果需要修改redis服务的配置,部分配置还需要修改启动文件,例如端口号与PID文件路径

EXEC=/usr/local/redis/bin/redis-server
#Redis服务器程序的完整路径当启动Redis服务时,系统会使用这个路径调用Redis服务器程序。

CLIEXEC=/usr/local/redis/bin/redis-cli
#Redis命令行客户端程序的完整路径,通过使用这个命令行与Redis服务器进行交互。

PIDFILE=/var/run/redis_6379.pid
#Redis服务运行时生成的进程ID文件的路径。在服务启动后,Redis进程的PID会被写入这个文件

CONF=/etc/redis/6379.conf
#Redis服务器的配置文件路径。Redis服务启动时会加载并解析这个配置文件中的各项设置。

REDISPORT=6379
#Redis服务监听的TCP端口号,这里设置为6379,这是Redis的默认端口

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哪一款个微管理助手比较好用?

私域流量兴起,社群运营成为热门,越来越多的行业进入社群的圈子。但是社群管理是个超麻烦、巨琐碎的活儿,方法不对,很容易无限陷入死循环。 此时,一个合适的管理工具可以帮我们高效管理,达到事半功倍的效果…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发(本文以应用开发为例,Atomic Servi…

云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理

方案概述 现在绝大多数客户都有很多非结构化的数据存在 OSS 中,以图片,视频,音频居多。举一个图片处理的场景,现在各种终端种类繁多,不同的终端对图片的格式、分辨率要求也不同,所以一张图片往往会有很多张…

泰迪智能科技高职人工智能专业人才培养方案

人工智能专业坚持以立德树人为根本,立足社会经济发展,面向信息技术行业,培养德智体美劳全面发展的人工智能领域的高素质工程型专门人才。毕业生具备扎实的数学、自然科学、工程技术、人文社科的基本理论, 系统深入的人工智能专业知识和实践能…

云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权

方案概述 MSE 网关可以为后端服务提供转发路由能力,在此基础上,一些敏感的后端服务需要特定认证授权的用户才能够访问。MSE 云原生网关致力于提供给云上用户体系化的安全解决方案,其中 JWT 认证能力是在 Json Web Token 这种结构化令牌的基础…

递归究竟是什么?如何快速编写正确的递归代码? —— 力扣经典面试题详解

递归究竟是什么?如何快速编写正确的递归代码? —— 力扣经典面试题详解 一、递归1.1 什么是递归?1.2 为什么会用到递归?1.3 如何快速编写正确的递归代码? 二、力扣相关笔试题解析[面试题 08.06. 汉诺塔问题](https://l…

【C++】list介绍

个人主页 : zxctscl 如有转载请先通知 文章目录 1. list介绍2. list的构造3. ist iterator的使用4. capacity5. element access6. modifiers7. 迭代器失效8. Operations8.1 reverse8.2 sort8.3 unique8.4 splice 1. list介绍 list是可以在常数范围内在任意位置进行插…

关闭搜狗输入法的输入框广告

使用搜狗输入法输入内容时,下面总是会有广告显示 可以通过如下方式关闭该广告显示 通过以上的设置,可以发现输入框不会再显示广告了

MySQL(常用函数、多表查询)

文章目录 1.数据库函数1.count函数案例答案count(*)与count(列)的区别 2.sum函数案例答案 3.avg函数案例答案 4.max/min函数案例答案 5.group by 分组统计案例答案 6.字符串相关函数演示练习 7.数学相关函数演示 8.日期相关函数演…

即时配送行业吸引百万骑手就业,这个行业真的赚钱吗?

互联网浪潮的影响下,人们的就业模式开始呈现出多元化的发展趋势,新生代劳动者更加偏爱自由灵活的工作模式。在这样的背景下,同城配送服务的诞生,就为大量骑手创造了灵活的就业机会。据数据平台报告显示,2023年我国外卖…

linux Centos7 部署 nodejs服务

nodejs服务要有nodejs环境。所以要先安装nodejs 不会安装的可以看 Centos7 安装 npm 学习 安装pm2 cnpm install pm2 -g, 查看pm2是否安装成功 pm2 -v,如果报错,升级node版本 进入node项目目录,安装项目依赖 cnpm install 创建pm2任务 [rootlocalhost serv…

手写简易操作系统(二十)--实现堆内存管理

前情提要 前面我们实现了 0x80 中断,并实现了两个中断调用,getpid 和 write,其中 write 还由于没有实现文件系统,是个残血版,这一节我们实现堆内存管理。 一、arena 在计算机科学中,“arena” 内存管理通…

鸿蒙人才供需两旺、抓住职业“薪”机遇

鸿蒙生态崛起,人才需求旺盛! 鸿蒙生态迅猛发展,人才供需均呈增长态势,鸿蒙开发工程师平均月薪显著领跑,显示出该领域的巨大潜力和吸引力,对于有志于鸿蒙开发的人才,这无疑是职业发展的黄金时期…

OpenHarmony实战:代码上库

前言 到达这一步好比临门一脚,意义很大!您的代码被合入 OpenHarmony 平台,这是最后的一道关口,保证合入的是正确的,并且不会对系统造成意外。 避坑指南 1. 填写 ISSUE 和 PR 按照规范进行 ISSUE 和 PR 填写不规范会…

CentOs7.9中修改Mysql8.0.28默认的3306端口防止被端口扫描入侵

若你的服务器被入侵,可以从这些地方找到证据: 若有上述信息,300%是被入侵了,重装服务器系统以后再重装Mysql数据库,除了设置一个复杂的密码以外,还需要修改默认的Mysql访问端口,逃避常规端口扫描…

马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4!

本文原文来自DataLearnerAI官方网站:马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4! | 数据学习者官方网站(Datalearner) 继Grok-1开源之后,xAI宣布了Grok-1.5的内测消息&…

Homebrew 镜像源配置

前言 当我们使用默认官方源时,经常会遇到以下问题 查看镜像配置 brew config 切换国内源 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 4.0 镜像配置 温馨提示:不要使用阿里云的 Homebrew 源&am…

使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件

一、使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件 一、创建 Vue 项目 1. 使用 Vite 创建 Vue 项目 npm create vitelatest # npm yarn create vite # yarn pnpm create vite # pnpm选择 Vue 和 TS 进入项目…

Spring IOC 容器循环依赖解决(三级缓存)

对于循环依赖的解决,首先得了解Spring IOC 容器的创建过程,在加载过程中,Bean 的实例化和初始化是分开的,所以在解决循环依赖的问题时,也是基于Bean 的实例化和初始化分开执行这一特点。 我们将实例化后的Bean 叫 半成…

【Web自动化】Selenium的使用(一)

目录 关于自动化测试selenium工作机制 selenium的使用selenium中常用API定位元素按id定位按名称定位按类名定位按标签名定位按CSS选择器定位按XPath定位示例 操作测试对象等待sleep休眠隐式等待显示等待 打印信息浏览器操作键盘事件鼠标事件切换窗口截图关闭浏览器 欢迎阅读本文…