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

使用Python的turtle模块绘制玫瑰花图案(含详细Python代码与注释)
1.1引言 turtle模块是Python的标准库之一,它提供了一个绘图板,让我们可以在屏幕上绘制各种图形。通过使用turtle,我们可以创建花朵、叶子、复杂的图案等等。本博客将介绍如何使用turtle模块实现绘制图形的过程,并展示最终结果。 …...
Redis学习笔记14:基于spring data redis及lua脚本ZSET有序集合实现环形结构案例及lua脚本如何发送到redis服务器
案例实现目标,一、实现一个环形结构,环形结构上节点有一个阀值threshold,超过阀值则移除分数score最低的成员,不足则将当前成员添加进环中,且确保成员不可重复;二、每次访问环中的数据都需要刷新key的过期时间…...
openssl C++研发之pem格式处理详解
一、PEM_writeXXX和EM_write_bio_XXX 在OpenSSL的crypto/pem.h头文件中,PEM_write_XXXX和PEM_write_bio_XXXX系列函数用于将特定类型的数据写入文件或BIO(内存缓冲区)中,其中XXXX代表不同的数据类型。 这些函数的使用方式相似&a…...

【教3妹学编辑-mysql】详解数据库三大范式
什么是范式 简单地理解就是:数据库设计时遵循的规范 三大范式 数据库三大范式包含:1、第一范式(1NF);2、第二范式(2NF);3、第三范式(3NF)。其中,第一范式(1NF)的要求是属性不可分割,第二范式(2NF)的要求是…...

【计算机网络笔记】路由算法之链路状态路由算法
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...

读像火箭科学家一样思考笔记04_第一性原理(下)
1. 来自无形规则的阻力 1.1. 无形规则 1.1.1. 僵化成规则的不必要习惯和行为 1.1.2. 不像有形的书面规则 1.1.2.1. 书面规则出现在标准操作流程中,可以修改或删除 1.1.3. 成文的规则可能会抗拒变革,但无形规则却更加顽固 1.1.4. 我们为强加在自己身…...

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

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

【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索
目录 1 HAI(高性能应用服务)简介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二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码简洁C二分查找算法:132 模式解法三枚举1性能最佳C单调向量算法:132 模式解法三枚…...
Map 和 WeakMap:JavaScript 中的键值对集合
JavaScript 是一种动态、弱类型的脚本语言,经常用于构建现代 Web 应用程序。在编写 JavaScript 代码时,我们经常需要使用各种数据结构来存储和管理数据。其中,Map 和 WeakMap 就是两个非常有用的数据结构,它们分别提供了用于存储键…...

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中新建血量,最大血量,耐力,最大耐力,金币变量,作为角色的状态 //主角状态UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category "Playe Stats&…...
C#中的DateTime类
C# 中的 DateTime 类是用于表示日期和时间的结构。它提供了一系列属性和方法,用于处理日期和时间的各种操作和计算。下面是一些常用的 DateTime 类的用法和方法解释,以及相应的示例说明: 创建 DateTime 对象: 使用当前日期和时间创…...

Flutter笔记:Matrix4矩阵变换与案例
Flutter笔记 Matrix4矩阵变换及其案例 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...