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

redis---非关系型数据库

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

redis非关系型数据库,又名缓存型数据库。
数据库类型:关系型数据库和非关系型数据库
关系型数据库是一 个机构化的数据库,行和列。
列:声明对象。
行:记录对象属性。
表与表之间的的关联。
sql语句,对指定的表,库,进行增删查改。
在创建表时,我们是设计好了表的结构。按照表结构来存储数据。数据与表结构不匹配,存储数据,会失败。


非关系型数据库:nosql not only sql
不需要定义数据库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)
redis key:values 键值对形式储存。每个键之间没有直接关联,库与库之间相互独立。

关系型非关系区别
1、数据的储存方式不同。

关系型数据库:库---------->表----------->行、列------------>存储数据

非关系型数据库:库--------->集合---------->键值

2、扩展方向:性能上的提升。关系型数据库靠的是提升本机性能。非关系型关系型数据库可以横向扩展,加入节点服务器的方式提高性能。
3、对事物的支持性,mysql支持事务。
关系型数据库:原子性、隔离性、一致性、持久性
非关系型数据库:也可以支持事务,redise也可以支持事务,但稳定性和处理能力都不如关系型数据库。

非关系型数据的主要场景: 1、操作的扩展
                                          2、海量数据处理

纯动态网站的三高问题:
1、对数据库高并发读写的需求。
2、对海量数据高效存储与访问的需求。
3、对数据库的高扩展性与高可用的需求。

redis非关系型数据库

数据库缓存:

ab85b3cbac974f4dbcd48de88b616dee.png

redis的工作特点:

redis服务器程序是一个单进程模式,即只有一个主进程工作。也就是说在一台服务器上启多个redis(端口号不能冲突)
redis的实际处理速度是完全依靠主进程的执行效率。

服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降
如果部署了多个redis进程,虽然能提高redis的并发处理能力, 但是会给服务器的cpu带来很大的压力。
一台服务器,一般部署3个redis进程。(更具情况来看,高并发要部署多个。)一般的情况,单进程足够)
 

redis的特点:

1、具有极高的读写速度,数据读取每秒110000次,写入数据每秒81000次写入。
2、支持丰富的数据类型。
3、支持持久化。平常的数据保存在内存中,持久化可以写入磁盘中,既可以保存在本地,也可以实现备份。
4、原子性,所有的操作都是原子性
5、支持数据主从模式------master slave模式

rdis为什么这么快?

1、redis纯内存结构,避免了磁盘I/O的耗时
2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
***特殊说明:redis的读写,依旧是单进程处理。

redis部署

yum install -y gcc gcc-c++ make
cd /opt/
将包拖到opt下
tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 4 
make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
---第四个回车后---
/usr/local/redis/bin/redis-serverln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
70行 加本机ip

redis的服务控制命令:

/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 status
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start

查看端口是否启动成功

ss -antp | grep redis

32581a03bd0a47fa9c830cd70fa72a8a.png

redis的命令工具:

redis-server:直接启动redis,只能启动
redis-benchmark: 检测redis在本机的运行效率
redis-cli:命令行工具
redis-check-aof: 检测AOF文件是否正常
redis-check-rdb: 检测rdb文件是否正常

redis-benchmark

-h指定服务器的主机名 ip地址
-p指定服务器的端口号
-c指定并发连接数
-n指定请求数
-a指定登陆密码

进入redis命令
1、redis-cil -h 192.168.10.80 -p6379
2、redis-cli 仅限制本地使用,远程访问需要指定ip和端口

redis的五大数据类型

1、 string(字符串)

string是redis最基本的类型,最大能存储512MB的数据,可以存储任何数据

格式:

创建    set 键名 键的值

0a904d8f083a429e80380c74e2105cc2.png

删除     del 键名

ce1846df8e1544a0826addf77baa2917.png

查看键值对的值    get 键名

44196111ccf54748bfd7556813edd2dd.png

查看所有键值对    keys * 

模糊查询?(表示单个字符)         *(多个字符)

查看键名生命周期:ttl 键名(秒)

3e69ffbcdb43454fbf3e79ff84bd3cf6.png

APPEND 有则拼接,无则创建输入

                APPEND 键名 键值

2a0ccd0e748c4dda91dc3f739895a056.png

EXISTS 

fec577f8a3d1422aaebf8fbabc687d68.png

STRLEN 标记长度

        STRLEN 键名

fcf761c9538f4d69aac3c84af61d9c3b.png

INCR   自增一        INCR 键名(只针对数字类型)

12f2a93e0cf441ad9517f88835f78afe.png

DECR  自减一        DECR 键名(只针对数字类型)

9595d684c0794682a9bcb8b8eb718e82.png

incrby 键值对 数值

40775d9e33684f7e9d0ae7c6bf65037f.png
decrby 键值对 数值

8b97ad31fbbd44cc9aa94c31b055bfaf.png

EXPIRE 对已有键值对设置生命周期

EXPIRE 键值对名 周期时间

1075e4aeb75147bba67a485973ac7b3a.png
(integer) -1 表示永不过期
(integer) -2 表示已过期

新建时声明键值对的声明周期

setex 键名 生命周期时间 内容

7a072c07c66e4aea8772c35ec4f1d29f.png

mset 键名1  值  键名2  值
mset key1 hello key2 world
#批量设置键keys *
#查看键mget 键名1 键名2
mget key1 key2
#同时打印多个键的值

2、list数据类型

正序查看:RPUSH test1 a b c 1 2 3

倒叙查看:LPUSH test a b c 1 2 3

#创建列表 后面时内容,但是当中的元素还是string类型

192.168.10.80:6379> LPUSH test a b c 1 2 3 
(integer) 6
192.168.10.80:6379> lrange test 0 -1
1) "3"
2) "2"
3) "1"
4) "c"
5) "b"
6) "a"
192.168.10.80:6379> LINDEX test 0
"3"
192.168.10.80:6379> LINDEX test 1
"2"
192.168.10.80:6379> RPUSH test1 a b c 1 2 3
(integer) 6
192.168.10.80:6379> lrange test1 0 -1
1) "a"
2) "b"
3) "c"
4) "1"
5) "2"
6) "3"
192.168.10.80:6379> LINDEX test 0
"3"
192.168.10.80:6379> LINDEX test1 0
"a"
192.168.10.80:6379> LPUSH test 1 2 3 4 5 6
(integer) 6
192.168.10.80:6379> LINDEX test -1
"1"
192.168.10.80:6379> LINDEX test 0
"6"
192.168.10.80:6379> LINDEX test 1
"5"
192.168.10.80:6379> LINDEX test 2
"4"
192.168.10.80:6379> LINDEX test 3
"3"
192.168.10.80:6379> LINDEX test 4
"2"
192.168.10.80:6379> 

list操作命令

lpush quoqi a b c d 12 13
#创建列表 后面时内容,但是当中的元素还是lrange 键名 0 -1
#查看列表中的数据(倒叙)lindex 键名 0
#根据索引下标打印数据lindex 键名 索引号
#根据索引下标打印数据rpush 键名 1 2 3 4
#创建列表正序查看 从右到左 从右-1开始自增lrange 键名 0 -1
#正序查看lrange 键名 1 2
#指定范围查看RPUSHX test 值
#在test其右侧加入一个值LPUSH test 值
#在test其左侧加入一个值lpop  键名
lpop guoqi1
#从左边开始删lrange guoqi1 0 -1
#范围查看键值对内部的值rpop  键名
rpop guoqi1
#从右边开始删lrange guoqi1 0 -1llen  键名
llen guoqi1
#查询列表内的元素lindex  键名  索引下标
lindex guoqi1 3
#指定索引下标查询lrange guoqi1 0 -1linsert 键名   before 索引下标范围
linsert guoqi1 before 3 10
#在指定位置前插入数据

3、hash类型

        hash类型用于存储对象,采用hash格式来进行操作。占用磁盘少,而且占用一个hash可以占用4294967295个键值对

创建:HSET 键名 字段 值
查看:HGET 键名 字段
创建多个:HSET 键名1 字段1 值2 字段2 值 字段3 值3
查看多个:HMGET 键名 字段1 字段2
查看所有字段:HGETALL 键名
删除:HDEL 键名 字段1 字段2
192.168.10.80:6379> HSET test tall 150
(integer) 1
192.168.10.80:6379> HGET test tall
"150"
192.168.10.80:6379> HMSET test age yes sex nan
OK
192.168.10.80:6379> HMGET test tall age sex
1) "150"
2) "yes"
3) "nan"
192.168.10.80:6379> HGETALL test
1) "tall"
2) "150"
3) "age"
4) "yes"
5) "sex"
6) "nan"
192.168.10.80:6379> HDEL test age
(integer) 1
192.168.10.80:6379> HGETALL test
1) "tall"
2) "150"
3) "sex"
4) "nan"
192.168.10.80:6379>

4、set数据类型

        无序集合元素类型也是string,元素是唯一的,不允许重复。多个集合类型可以进行并集。交集和差集运算.
set 元素类型是唯一的,可以跟踪一些唯一性的数据。只要把对应名称redis,set 可以

创建:SADD 集合名 
查看:SMEMBERS 集合名
随机给出一个元素:SRANDMEMBER 集合名
随机移除一个元素:SPOP 集合名
指定移除:SREM 集合名

5、有序集合

        有序集合,元素类型也是string,元素唯一,不能重复,每个元素都会关联一个double (小数点)的分数(score,表示权重)可以通过权重的大小,进行排序。元素的权重可以相同。
zset:可以应用到在线积分的排行榜,可以实时更新用户的分数。

创建:
ZADD 集合名 权重1 元素1  权重2 元素2  权重3 元素3
ZADD test1 1 one 2 two 3 three查看+权重:
ZRANGE 集合名 0 -1 WITHSCORES                   WITHSCORES安照权重来排序
ZRANGE test1 0 -1 withscores查看不加权重:
ZRANGE 集合名 0 -1
ZRANGE test1 0 -1获取成员数量:
ZCARD 集合名
ZCARD test1获取成员数量权重范围 
ZCOUNT 集合名 权重范围
ZCOUNT test1 2 3删除集合元素        
ZREM 集合名 元素
ZREM test1 three查看元素权重 
ZSCORE 集合名 元素
ZSCORE test1 two

操作过程

192.168.10.80:6379> ZADD test1 1 one 2 two 3 three
(integer) 3
192.168.10.80:6379> ZRANGE test1 0 -1
1) "one"
2) "two"
3) "three"
192.168.10.80:6379> ZRANGE test1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
192.168.10.80:6379> ZCARD test1
(integer) 3
192.168.10.80:6379> ZCOUNT test1 2 3
(integer) 2
192.168.10.80:6379> ZREM test1 three
(integer) 1
192.168.10.80:6379> ZRANGE test1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
192.168.10.80:6379> ZSCORE test1 two
"2"
192.168.10.80:6379> 

查询redis库

redis的库都是创建好的,有16个库

数字排名:0-15

每个数据库之间互相独立,互不干扰

select [0-15]
#切换库 dbsize
#查看当前库中键的数量keys *
查看键move 键名  库的序号
MOVE test1 1查看键的类型
type 键名
192.168.10.80:6379> KEYS *
1) "test"
2) "test1"
192.168.10.80:6379> KEYS *
1) "test"
192.168.10.80:6379> SELECT 1
OK
192.168.10.80:6379[1]> KEYS *
1) "test1"
192.168.10.80:6379[1]> 

密码

设置密码
config set requirepass 密码
config set requirepass 123456在内声明密码
auth 密码
auth 123456在外生声明密码
redis-cli -h ip -p 6379 -a 密码
redis-cli -h 192.168.10.80 -p 6379 -a 123456

清除库

FLUSHDB
#清除当前库FLUSHALL
#清空所有库

总结:

redis读写速度快

数据类型:

1、string
2、list
3、hash 对一个键进行多字段操作用于hash 节省内存空间
4、set 元素不能重复,可以定义唯一值
5、zset 元素不能重复,单权重可以重复

面试题:

rdis为什么这么快?
1、redis纯内存结构,避免了磁盘I/O的耗时
2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
***特殊说明:redis的读写,依旧是单进程处理。

相关文章:

redis---非关系型数据库

关系数据库与非关系型数据库 redis非关系型数据库,又名缓存型数据库。数据库类型:关系型数据库和非关系型数据库关系型数据库是一 个机构化的数据库,行和列。 列:声明对象。 行:记录对象属性。 表与表之间的的关联。 sql语句&…...

Java WebSocket 获取客户端 IP 地址

在开发 Web 应用程序时,我们通常需要获取客户端的 IP 地址用于日志记录、身份验证、限制访问等操作。当使用 WebSocket 协议时,我们可以使用 Java WebSocket API 来获取客户端的 IP 地址。 本文将介绍如何使用 Java WebSocket API 获取客户端 IP 地址&a…...

【HarmonyOS】低代码平台组件拖拽使用技巧之页签容器

【关键字】 HarmonyOS、低代码平台、Tabs、TabContent、页签导航 1、写在前面 前面几篇分别介绍了低代码平台中的堆叠容器、滚动容器、网格布局等三种容器的使用,实际开发中我们经常会有这样的需求,页面底部是三个Tab按钮点击时会分别切换不同的视图内…...

Linux fork和vfork函数用法

fork和vfork是用于创建新进程的函数,在Linux的C语言编程中非常常见。 fork函数 fork函数是用于创建一个新的进程,新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后,父进程和子进程将并发执行。 …...

Oracle Data Redaction和Oracle Data Pump

本实验的使用环境基于之前的博客:一个简单的Oracle Redaction实验 本实验参考文档为15.14 Oracle Data Redaction and Oracle Data Pump 先创建directory并赋权: -- connect to database or pluggable database alter session set containerorclpdb1;…...

python django 小程序图书借阅源码

开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

CI/CD --git版本控制系统

目录 一、git简介 二、git使用 三、github远程代码仓库 一、git简介 Git特点: 速度简单的设计对非线性开发模式的强力支持(允许成千上万个并行开发的分支)完全分布式有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数…...

CSS中2种复合选择器

1:交集选择器 作用:选中同时符合多个条件的元素 语法:选择器1选择器2选择器n{} 注意:若交集选择器中有元素选择器,必须使用元素选择器开头 2:并集选择器 作用:同时选择多个选择器对应的元素 语法:选择…...

【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用

文章目录 写在前面开发环境搭建skynet配置文件项目,启动! debug console 写在前面 本系列【Skynet 入门实战练习】所有源码同步:https://gitee.com/Cauchy_AQ/skynet_practice 开发环境搭建 skynet skynet 框架地址:https://g…...

【探索嵌入式虚拟化技术与应用】— 虚拟化技术深入浅出自学系列

🌈个人主页: Aileen_0v0🔥系列专栏:【探索嵌入式虚拟化技术与应用】💫个人格言:"没有罗马,那就自己创造罗马~" 目录 一、虚拟技术的发展历史 1.1传统技术的局限性: ​编辑 1.2云计算和万物互联技术的发展机遇&#x…...

MIB 6.1810实验Xv6 and Unix utilities(5)find

难度:moderate Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution should be in the file user/find.c. 题目要求:实现find ,即在某个路径中,找出某…...

百度爬虫的工作原理解析

百度作为中国最大的搜索引擎,其工作原理备受关注。本文将深入探讨百度爬虫的工作原理,介绍其基本流程以及关键技术,帮助读者更好地理解搜索引擎背后的技术核心。 百度爬虫是百度搜索引擎的重要基石,它们被广泛用于收集互联网上的网…...

Linux入门必备指令

Linux学习之路起始篇——Linux基本指令 文章目录 Linux学习之路起始篇——Linux基本指令**一、ls指令****二、pwd命令****三、cd命令****四、touch指令****五、mkdir命令****六、rm命令****七、man 命令****八、cp命令****九、mv命令****10、cat 指令****十一、tac命令** 前言&…...

linux系统环境下mysql安装和基本命令学习

此篇文章为蓝桥云课--MySQL的学习记录 块引用部分为自己的实验部分,其余部分是课程自带的知识,链接如下: MySQL 基础课程_MySQL - 蓝桥云课 本课程为 SQL 基本语法及 MySQL 基本操作的实验,理论内容较少,动手实践多&am…...

Monitor 原理

每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。 Monitor组成内容 EntryList(入口列表) 当一个线…...

Java核心知识点整理大全7-笔记

目录 4.1.9. JAVA 锁 4.1.9.1. 乐观锁 4.1.9.2. 悲观锁 4.1.9.3. 自旋锁 4.1.9.4. Synchronized 同步锁 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 4.1.9.5. ReentrantLock Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized …...

Flink Operator 使用指南 之 全局配置

背景 在上一个章节中已经介绍了基本的Flink-Operator安装,但是在实际的数据中台的项目中,用户可能希望看到Flink Operator的运行日志情况,当然这可以通过修改Flink-Operator POD的文件实现卷挂载的形势将日志输出到宿主机器的指定目录下,但是这种办法对数据中台的产品不是…...

手把手教你通过CODESYS V3进行PLC编程(一)

教程背景 宏集MC系列模块化控制器是基于Raspberry Pi的高性能4核控制器,运动控制循环时间最快可达500微秒,实现了计算能力和成本之间的最佳平衡,适用于多轴运动控制和CNC控制。 教程目的 本系列教程将使用宏集MC系列控制器,详细…...

《算法通关村—进制转换问题处理模板》

《算法通关村—进制转换问题处理模板》 先来一个题热热身 504. 七进制数 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10"提示: …...

python接口自动化测试之接口数据依赖

一般在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那又该如何继续呢? 那么有如下思路: 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时,…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...

MLP实战二:MLP 实现图像数字多分类

任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…...

RFID推动新能源汽车零部件生产系统管理应用案例

RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域,电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式,存在单点位单独头溯源、网关布线…...