当前位置: 首页 > news >正文

Nosql之redis概述及基本操作

关系数据库与非关系型数据库概述

关系型数据库

关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
以上数据库在使用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,
如果数据与表结构不匹配就会存储失败。

非关系型数据库

NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
除了主流的关系型数据库外的数据库,都认为是非关系型。
不需要预先建库建表定义数据存储表结构每条记录可以有不同的数据类型和字段个数
(比如微信群聊里的文字、图片、视频、音乐等)。
主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached 等。

关系型数据库和非关系型数据库区别

1、数据的存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式
关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起
2、扩展方式不同
SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。

NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,
NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
3、对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划
那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。
SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,
所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

非关系型数据库产生背景

可用于应对Web2.0(交互)纯动态网站类型的三高问题。
(1)对数据库高并发读写需求
(2)对海量数据高效存储与访问需求
(3)对数据库高可扩展性与高可用性需求

小结

关系数据库

  • 1、安全性高(持久化)
  • 2、事务处理能力强
  • 3、任务控制能力强
  • 4、可以做日志备份、恢复、容灾的能力更强一点。

数据库-->表-->记录行(row)、数据字段(column)-->存储数据

非关系数据库

  • 1、数据保存在缓存中,利于读取速度/查询数据
  • 2、架构中位置灵活
  • 3、分布式、扩展性高

非关系型数据库:数据库-->集合(collection)-->键值对(key-value)
不需要手动建数据库和集合(表)。

Redis简介

Redis(远程字典服务器)是一个开源的,使用c语言编写的NoSQL数据库。
基于内存运行,支持持久化(数据恢复)。采用的就是key-value(键值对)的存储形式。
目前在分布式架构中是非常重要的一环。

redis服务器程序是一个单进程模型,也就是说在一台服务器上可以启动多个redis
(注意端口号不能冲突)
redis的实际处理速度是完全依靠主进程的执行效率。
服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降。
部署了多个redis进程,虽然能提高redis的并发处理能力,但会给服务器的cpu带来很大的压力。
一台服务器一般部署3个redis进程。
(根据情况来看,高并发要部署多个。一般的情况,单进程足够)

Redis的优点
1、具有极高的读写速度,数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
2、支持丰富的数据类型,支持 key-value、Strings、Lists、Hashes、Sets等数据类型操作。
3、支持数据的持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可以实现备份。
4、原子性,Redis所有操作都是原子性的。
5、支持主从模式,即master-slave模式。

redis为什么这么快?
1、redis是纯内存结构,避免了磁盘I/O的耗时。
2、核心模块是一个单进程,减少了线程切换和回收线程资源的时间。
3、I/O的多路复用机制。每一个执行线路都可以同时执行读和写。高并发的效率大大提高。
特殊说明:redis的读写命令,仍然是单进程处理。

Redis安装部署

systemctl stop firewalld
setenforce 0
yum install -y gcc gcc-c++ make
cd /opt
--拖入redis压缩包--
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd redis-5.0.7/
make -j 4
make PREFIX=/usr/local/redis install
cd utils
./install_server.sh
#一直回车
Please select the redis executable path [] /usr/local/redis/bin/redis-server  	
#需要手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入ln -s /usr/local/redis/bin/* /usr/local/bin/
ss -antp | grep redis修改配置文件
vim /etc/redis/6379.conf
--70行添加监听的主机地址--
bind 127.0.0.1 20.0.0.91
--93行Redis默认的监听端口--
port 6379
--137行启用守护进程(后台运行)--
daemonize yes
--159行指定PID文件--
pidfile /var/run/redis_6379.pid
--167行日志级别--
loglevel notice
--172行指定日志文件--
logfile /var/log/redis_6379.log/etc/init.d/redis_6379 restart
ss -antp| grep redis

Redis命令工具

redis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具

redis-cli命令行工具

语法:redis-cli -h host -p port -a password
-h:指定远程主机
-p:指定 Redis 服务的端口号
-a:指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的 Redis 数据库redis-cli -h 20.0.0.91 -p 6379 -a 123456

redis-benchmark测试工具

redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。
基本的测试语法:redis-benchmark [选项] [选项值]。
-h :指定服务器主机名。
-p :指定服务器端口。
-c :指定并发连接数。
-n :指定请求数。
#向IP地址为20.0.0.91、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
redis-benchmark -h 20.0.0.91 -p 6379 -c 100 -n 100000#测试存取大小为100字节的数据包的性能
redis-benchmark -h 20.0.0.91 -p 6379 -q -d 100#测试本机上Redis服务在进行set与lpush操作时的性能
redis-benchmark -t set,lpush -n 100000 -q

Redis数据库常用命令及数据类型

基础数据类型

string字符串
list列表,双向链表
hash散列,键值对集合
set集合,不重复
sorted set,也可以称为Zset有序集合

1.String数据类型

keys *展示所有键名

set存放数据

格式:
set key value

#set操作可覆盖原有值

get获取数据

格式:
get key

keys结合*、?查看键值列表

exists查看键名是否存在

del删除键

type查看键的类型

append追加键值

格式:
append key value
追加键值,并返回追加后的长度(若键不存在,则相当于创建)

strlen查看键值长度

incr自增1

decr自减1

setex设置指定key的过期时间

expire设置已有key的指定时间

mset批量存放及mget批量获取

flushall删除redis中所有数据

2.list数据类型

列表,但是列表中的元素还是string类型,按照插入顺序排序,在列表的头部或尾部添加元素

lpush左插入列表元素(反向排列)

格式:
LPUSH key value [value …]

lpushx在头部插入元素值

格式:
lpush key value
#键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

rpush右插入列表元素(正向排列)

rpushx在尾部插入元素值

lrange获取列表元素

格式:
lrange key start stop
#取从位置索引start到位置索引stop的所有元素(所以以0开始)

lpop移除列表第一个元素

rpop移除列表最后一个元素

llen获取列表长度

 lindex获取指定索引元素

lset指定索引位将元素设为新值

linsert在元素前\后插入新元素

3.Hash数据类型

hash用于存储对象。可以采用这样的命名方式(hash格式):对象类别和ID构成键名,
使用字段表示对象的属性而字段值则存储属性值。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间

每一个Hash可以存储4294967295个键值对。
对一个键进行多字段存储,节省内存,使用hash方式.

hset给键设置字段和值

hmset给键同时设置多个字段和值

hget获取键中字段的值

hmget同时获取键中多个字段的值

hdel删除键中的字段

hgetall获取键中所有字段及其值

hkeys获取键中所有字段

hvals获取键中所有字段的值

4.set数据类型

无序集合,元素类型为string类型,元素具有唯一性, 不允许存在重复的成员
多个集合类型之间可以进行并集、交集和差集运算。
可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。

sadd插入数据

smembers查看数据

sismember查看元素是否存在

srandmember随机返回某一元素

spop随机移除某一元素

srem指定移除元素

smove移动元素至其他键

5.有序集合

有序集合,元素类型为String,元素具有唯一性, 不能重复。
每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

zadd添加成员

zrange获取键中成员

zrank获取键中成员索引位置

zcard获取键中成员数量

zcount指定条件统计成员

zrem删除成员

zscore查看权重

 dbsize查看当前库中键的数量

6.其他相关操作

 rename修改键名

select切换库

redis有自动创建好的16个库(序号0-15),互相独立,互补干扰,默认库序号为0

move移动键到其他库

config设置密码

auth在内声明密码

-a在外声明密码

flushdb删除当前库数据

flushall删除所有库数据

相关文章:

Nosql之redis概述及基本操作

关系数据库与非关系型数据库概述 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型…...

使ros1和ros2的bag一直互通

很多文章都是先source ros1 然后source ros2,再play bag source /opt/ros/noetic/setup.bash source /opt/ros/foxy/setup.bash ros2 bag play -s rosbag_v2 kitti_raw00.bag 但实测会出问题: 为使ros1和ros2的bag一直互通 sudo apt update sudo apt install ros-foxy-ro…...

【正点原子 linux 驱动编程】

在此声明&#xff0c;正用点编的说明书真的拉&#xff0c;丝毫不具备兼容性。。比如linux的第一个实验&#xff0c;其中包含的 unregister_chrdev_region 函数&#xff0c;fileoperation 结构体等均来自 <linux/fs.h> 文件&#xff0c;搞不懂&#xff0c;他们方ide.h&…...

使用Python的turtle模块绘制玫瑰花图案(含详细Python代码与注释)

1.1引言 turtle模块是Python的标准库之一&#xff0c;它提供了一个绘图板&#xff0c;让我们可以在屏幕上绘制各种图形。通过使用turtle&#xff0c;我们可以创建花朵、叶子、复杂的图案等等。本博客将介绍如何使用turtle模块实现绘制图形的过程&#xff0c;并展示最终结果。 …...

Redis学习笔记14:基于spring data redis及lua脚本ZSET有序集合实现环形结构案例及lua脚本如何发送到redis服务器

案例实现目标&#xff0c;一、实现一个环形结构&#xff0c;环形结构上节点有一个阀值threshold,超过阀值则移除分数score最低的成员&#xff0c;不足则将当前成员添加进环中&#xff0c;且确保成员不可重复&#xff1b;二、每次访问环中的数据都需要刷新key的过期时间&#xf…...

openssl C++研发之pem格式处理详解

一、PEM_writeXXX和EM_write_bio_XXX 在OpenSSL的crypto/pem.h头文件中&#xff0c;PEM_write_XXXX和PEM_write_bio_XXXX系列函数用于将特定类型的数据写入文件或BIO&#xff08;内存缓冲区&#xff09;中&#xff0c;其中XXXX代表不同的数据类型。 这些函数的使用方式相似&a…...

【教3妹学编辑-mysql】详解数据库三大范式

什么是范式 简单地理解就是&#xff1a;数据库设计时遵循的规范 三大范式 数据库三大范式包含&#xff1a;1、第一范式(1NF)&#xff1b;2、第二范式(2NF)&#xff1b;3、第三范式(3NF)。其中&#xff0c;第一范式(1NF)的要求是属性不可分割&#xff0c;第二范式(2NF)的要求是…...

【计算机网络笔记】路由算法之链路状态路由算法

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

读像火箭科学家一样思考笔记04_第一性原理(下)

1. 来自无形规则的阻力 1.1. 无形规则 1.1.1. 僵化成规则的不必要习惯和行为 1.1.2. 不像有形的书面规则 1.1.2.1. 书面规则出现在标准操作流程中&#xff0c;可以修改或删除 1.1.3. 成文的规则可能会抗拒变革&#xff0c;但无形规则却更加顽固 1.1.4. 我们为强加在自己身…...

开源集群管理系统对比分析:Kubernetes 与 Apache Mesos

集群管理系统是关键的软件解决方案&#xff0c;可以在互连机器网络中有效分配和利用计算资源。毫无疑问&#xff0c;它们通过确保可扩展性、高可用性和有效的资源管理在现代计算中发挥着至关重要的作用&#xff0c;这使得它们对于运行复杂的应用程序、管理数据中心以及进一步增…...

matlab 坡度滤波算法地面分割

目录 一、算法原理1、实现流程2、参考文献二、代码实现三、结果展示四、测试数据一、算法原理 1、实现流程 1、格网示意图 2、计算格网行列数 公式中的特殊符号为向上取整,...

【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索

目录 1 HAI&#xff08;高性能应用服务&#xff09;简介2 HAI的应用场景2.1 HAI在AI作画中的灵活性与效率2.2 深入探索LLM语言模型的应用与性能2.3 HAI支持的AI模型开发环境与工具 3 基于stable difussio的AI 绘画应用实践3.1 使用AI模型中的stable diffusion模型服务3.2 设置和…...

【Java】ExcelWriter自适应宽度工具类(支持中文)

工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

C++二分查找算法:132模式枚举3简洁版

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三枚…...

Map 和 WeakMap:JavaScript 中的键值对集合

JavaScript 是一种动态、弱类型的脚本语言&#xff0c;经常用于构建现代 Web 应用程序。在编写 JavaScript 代码时&#xff0c;我们经常需要使用各种数据结构来存储和管理数据。其中&#xff0c;Map 和 WeakMap 就是两个非常有用的数据结构&#xff0c;它们分别提供了用于存储键…...

linux rsyslog综合实战1

本次我们通过rsyslog服务将A节点服务器上的单个日志(Path:/var/log/245-1.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS Linux release 7.9.2009 (Core)rs…...

redis+python 建立免费http-ip代理池;验证+留接口

前言: 效果图: 对于网络上的一些免费代理ip,http的有效性还是不错的;但是,https的可谓是凤毛菱角; 正巧,有一个web可以用http访问,于是我就想到不如直接拿着免费的HTTP代理去做这个! 思路: 1.单页获取ipporttime (获取time主要是为了后面使用的时候,依照时效可以做文章) 2.整…...

虚幻C++ day5

角色状态的常见机制 创建角色状态设置到UI上 在MainPlayer.h中新建血量&#xff0c;最大血量&#xff0c;耐力&#xff0c;最大耐力&#xff0c;金币变量&#xff0c;作为角色的状态 //主角状态UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category "Playe Stats&…...

C#中的DateTime类

C# 中的 DateTime 类是用于表示日期和时间的结构。它提供了一系列属性和方法&#xff0c;用于处理日期和时间的各种操作和计算。下面是一些常用的 DateTime 类的用法和方法解释&#xff0c;以及相应的示例说明&#xff1a; 创建 DateTime 对象&#xff1a; 使用当前日期和时间创…...

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…...

数字IC前端学习笔记:时钟切换电路

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 有些时候我们需要在系统运行时切换系统时钟&#xff0c;最简单的方法就是使用一个MUX&#xff08;数据选择器&#xff09;选择输出的时钟&#xff0c;如下代码片所…...

.NET6使用MiniExcel根据数据源横向导出头部标题及数据

.NET6MiniExcel根据数据源横向导出头部标题 MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 特点: 低内存耗用&#xff0c;避免OOM、频繁 Full GC 情况 支持即时操作每行数据 兼具搭配 LINQ 延迟查询特性&#xff0c;能办到低消耗、快速分页等复杂查询 轻量…...

表内容的操作(增删查改)【MySQL】

文章目录 表的 CRUDCreate&#xff08;增加&#xff09;插入记录插入冲突则更新记录替换记录 Retrieve&#xff08;查找&#xff09;查找记录指定表达式的别名为结果去重WHERE 子句运算符条件查询区间查询模糊查询空值查询 对结果排序筛选分页结果 Update&#xff08;修改&…...

C++快速入门 - 2(几分钟让你快速入门C++)

C快速入门 - 2 1. 内联函数1.1 概念1.2 特性 2. auto关键字(C11)2.1 类型别名思考2.2 auto简介2.3 auto的使用细则2.4 auto不能推导的场景 3. 基于范围的for循环(C11)3.1 范围for的语法3.2 范围for的使用条件 1. 内联函数 1.1 概念 以inline修饰的函数叫做内联函数&#xff0c…...

Excel自定义函数提取超链接

通过自定义函数的方法&#xff0c;批量提取超链接 首选开启开发工具选项 文件-选项-自定义功能区-勾选开发工具选项-确认 AltF11或者直接点击跳转到开发工具-Visual Basic 在左上方VBA project空白处右键点击空白区域-插入-模块 在弹出的窗口中输入以下命令定义GetURL函数 F…...

计算矩阵边缘元素之和

Description 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 Input 第一行分别为矩阵的行数m和列数n&#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c;…...

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测 目录 回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测&#xff08;…...

Flutter笔记:目录与文件存储以及在Flutter中的使用(下)

Flutter笔记 目录与文件存储以及在Flutter中的使用&#xff08;下&#xff09; 文件读写与Flutter中文件管理 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;…...

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…...

系列二、Lock接口

一、多线程编程模板 线程 操作 资源类 高内聚 低耦合 二、实现步骤 1、创建资源类 2、资源类里创建同步方法、同步代码块 三、12306卖票程序 3.1、synchronized实现 3.1.1、Ticket /*** Author : 一叶浮萍归大海* Date: 2023/11/20 8:54* …...