redis非关系型数据库

redis非关系型数据库,缓存型数据库

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

关系型数据库

关系型数据库是一个结构化的数据库。

记录方式:行和列

行的作用:记录对象的属性

列的作用:声明对象

表与表之间是有关联的:外键关联、左连接、右连接、内连接。使用sql语句,来对指定的表、库进行增删改查。

在创建表时,设计好了表的结构。按照表结构存储数据。数据与表结构不匹配那么存储数据会失败。

非关系型数据库

非关系型数据库:nosql not only sql

非关系型数据库不需要定义库也不需要定义表的结构,而且直接记录即可,每条记录可以有不同的数据类型、字段。甚至字段个数都可以自定义。

redis key:value 键值对形式存储。每个键之间没有直接关联。库与库之间互相独立。

区别

1、 存储方式不同:关系型数据库需要提前声明数据类型。非关系型则不需要提前声明数据类型。是键值对形式存储

2、 扩展方式,性能上的提升。关系型数据库靠的是提升本机性能。非关系型数据库,可以横向扩展,加入节点服务器的方式提高性能

3、 对事务的支持性不同:原子性:最小单元、隔离性:一个事务执行不能被其他事务干扰、一致性:前后数据保持一致,保证诗句完整性、持久性:一旦写入不可更改

非关系型数据库也可以支持事务,但是其稳定性和处理能力都不如关系型数据库。

非关系型数据库的主要场景

1、 操作的扩展性

2、 大数据量处理(海量数据处理)

非关系型数据库产生的原因

web2.0的核心作用:交互

纯动态网站的三高问题:

1、 对数据库高并发读写的需求

2、 对海量数据高效存储与访问的需求

3、 对数据库的高可扩展性与高可用性的需求

常见的缓存需求场景:数据库缓存、web页面缓存、cpu和硬盘之间的缓存

非关系型数据库缓存工作流程图:

总结

关系型数据库:

库--->---表---->---行,列--->----存储数据

非关系型数据库:

库---->---集合---->键值对

非关系型数据库不需要手动创建库和集合(本身自带)

夹在两个应用程序之间就是中间键

什么是redis?

redis是开源的,使用c语言编写的NQL数据库。

redis基于内存运行,支持持久化(数据恢复)。采用key-value(键值对)的存储形式。目前在分布式架构中,非常重要的一环。

redis的数据流向和工作流程架构图:

redis的工作特点

redis服务器程序是一个单进程模式。即只有一个主进程工作。也就是说可以在一台服务器上启动多个redis。需要注意端口号不能冲突

1、 redis的实际处理速度,是完全依靠主进程的执行效率。

2、 服务器只部署了一个redis进程,多个客户端访问可能会导致redis的处理能力下降。

3、 如果部署了多个redis进程虽热能提高redis的并发处理能力,但是会给服务器cpu带来很大的压力。

工作中,一台服务器,一般部署3个redis进程。(视情况而定)一般情况单进程足够了。

redis的特点

1、 具有极高的读写速度,数据读取支持每秒11万次。写入数据支持每秒执行8万1千次写入。

2、 可以支持丰富的数据类型。

3、 支持持久化。平常的数据都是保存在内存中。持久化可以写入到磁盘中。既可以保存到本地也可也实现备份。

4、 原子性:最小单位。redis所有的操作都是原子性。要么都成功要么都失败

5、 支持主从模式实现数据同步。master-slave模式

redis部署

tar -xf redis
#解压redis安装包
make -j4
#编译
make PREFIX=/usr/local/redis install
#指定安装位置
cd utils
./install_server.sh
默认端口号回车
指定配置文件默认回车
指定日志文件路径默认回车
指定数据文件路径默认回车
指定工作目录:/usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
#创建一个软连接
netstat -antp | grep redis
#查看一下redis端口是否启动成功redis安装成功!

redis进行服务控制命令

redis的服务为控制命令:

/etc/init.d/redis_6379 
/etc/init.d/redis_6379 stop 
#停止redis服务/etc/init.d/redis_6379 start 
#启动redis服务/etc/init.d/redis_6379 restart 
#重启redis服务/etc/init.d/redis_6379 status
#查看redis的状态vim /etc/redis/6379.conf
70行添加本机的ip即可

redis的命令工具:

redis-server
#可以直接启动redisredis-benchmark
#检测redis在本机的运行效率redis-cli
#命令行工具redis-check-aof
#检测持久化文件AOF文件是否正常redis-check-rbd
#检测持久化文件RBD文件是否正常

redis-benchmark的语法:检测redis在本机的运行效率

redis-benchmark -h
#指定服务器的主机名 ip地址redis-benchmark -p
#指定服务器的端口号redis-benchmark -c
#指定并发连接数redis-benchmark -n
#指定请求数

redis的数据类型

如何进入redis?

redis-cli -h 本机ip -p 端口号
redis-cli -h 20.0.0.26 -p 6379 
#进入redisredis-cli
#仅限于本地,远程登录还是需要指定目标服务器的ip地址redis-cli -h 20.0.0.26 -p 6379 
#-h 指定IP地址
#-p 指定端口号
#-a 指定登录密码

redis五大数据类型

1、 string(字符串):是redis最基本的类型,最大能存储512MB的数据,可以存储任何数据

查询键值对和修改键值对名
KEYS *
#查看有哪些键set 键名 值
set test zyg
#set给键起个名字get 键名
get test
#查询键的值set test 10
#可以直接替换键内部的值keys 键名
keys test
#模糊查询法keys t*
#模糊查询法任意长度(生产中尽量别用*)keys t?
#以t开头后面任意1位的键keys t??
#以t开头后面意义2位置的键

查询键值对是否存在和删除键指定键
exists 键名
exists test
#判断键名是否存在。返回1表示存在,返回0表示不存在del 键名 键名
del t1 t22 
#删除键,可以一次1个也可也一次多个

查询键值对的类型和长度
type 键名
type test
#查看键值对的类型append 键名 值
append test1 hello
#如果键不存在,直接返回键的长度append test1 world
#如果键已经存在,会拼接起来,返回拼接后的总长度strlen 键名
strlen test1
#直接返回键的长度

键值对的自增和自减
set 键名 值
set test1 10
#可以直接覆盖键的值get test1
incr 键名
incr test1
#自增1decr 键名
decr test1
#自减1只能对数字类型进行操作

对指定数值进行增加和减少
set test1 15
decrby 键名 值
decrby test1 10
#对指定数值进行减少incrby 键名 值
incrby test1 20
#对指定数值增加get test1

声明键值对的生命周期
setex 键名  值  lo
setex test2 5 lo
#新建时声明键值对的声明周期ttl 键名
ttl test2
#查看键值对的生命周期 -2代表键值对已经失效-1表示永不过期expire 键名  时间(秒)
expire test 30
#对已有键值对修改生命周期 30秒

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

2、 list数据类型:列表。但是列表当中的元素还是string类型

创建列表
lpush 键名   值
lpush zyg a b c d 1 2 3
#创建列表 后面时内容,但是当中的元素还是string类型lrange 键名 范围
lrange zyg 0 -1
#查看列表中的数据(倒叙)lindex 键名 索引下标
lindex zyg 0
lindex zyg 4
#根据索引下标打印数据
rpush  键名  值
rpush guoqi1 1 2 3 4
#创建列表正序查看
lrange guoqi1 0 -1
#正序查看
lrange guo1i1 1 2
#指定范围查看

对列表插入值
lpushx  键名  值
lpushx guoqi1 10
#共左插入lrange  键名  范围
lrange guoqi1 0 -1
#通过索引下标范围查看rpushx guoqi1 5
#从右插入lrange guoqi1 0 -1
#通过索引下标范围查看

删除列表内的值
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
#在指定位置前插入数据lrange guoqi1 0 -1

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

创建hash类型的数据
hset  键名  字段  值
hset zyg2 tall yes
#创建一个hash类型的数据hget  键名 字段
hget zyg2 tall
#打印tall的值hset 键名  字段    值
hset zyg2 hangsan yes
#添加1个字段hmget 键名 字段  字段
hmget zyg2 tall handsan
#批量打印字段hset 键名 字段 值
hset zyg2 age 20
#再添加一个字段hmget 键名  字段   字段   字段
hmget zyg2 tall hangdsan age
#一次性打印多个字段

删除一个或多个
hdel  键名   字段
hdel zyg2 hangsan
#删除单个字段hdel  键名 字段 字段
hdel zyg2 tall age
#删除多个字段hmget  键名  字段 字段   字段
hmget zyg2 tall hangsan age
#差选多个字段

一次性创建多个值
hmset 键名  字段 值 字段 值 字段 值 字段 值
hmset zyg3 tall 1 rich 2 age 23 fcz 500
#一次性创建多个字段hmget 键名 字段 字段 字段 字段
hmget zyg3 tall rich age fcz
#一次性打印多个名称和值

直接查看键值对的所有字段和值
hgetall  键名
hgetall zyg3
#查看键的字段和值hkeys  键名
hkeys zyg3
#当前键值对的字段名hvals  键名
hvals zyg3
#当前键值对的值

删除键值对
del zyg3
#删除键值对

4、 set数据类型(无序集合)元素类型也是string。元素是唯一的,不允许重复,多个集合类型可以进行并集。交集和差集运算。

set当中的元素类型是唯一的,可以跟踪一些唯一的数据。访问微博的用户名。访问微博的用户名,只要把对饮名称redis,set集合可以自动保存唯一性,方便下一次的访问

创建集合

flushall
#清除所有库的所有内容sadd 集合名 值
sadd myset a a c
#创建无序集合myset并创建成员smembers 集合名
SMEMBERS myset
#查看成员信息合集中不能插入重复数据!

查看合集中值是否存在

sismember 键名 值
sismember myset c
#查看合集中数据是否存在1表示存在0表示不存在

随机返回和移除
srandmember 集合名
SRANDMEMBER myset
#随机返回一个值spop 集合名
spop myset
#随机移除一个值srem 集合名  值
srem myset a e f
#指定值删除smembers 集合名
SMEMBERS myset
#查看合集的内容

5、 有序集合:有序集合,元素类型也是string,元素唯一,不能重复。

每个元素都会关联一个double(小数点)的分数(score,表示权重)通过权重大小。进行排序。元素的权重可以相同。

zset:运用在在线积分的排行榜,可以实时跟新用户的分数和排名。

zrange命令返回积分top10的用户。zrank命令通过username来获取用户的排行信息。

通过权重来排列

创建有序集合

zadd 集合名 权重 元素
zadd myzset 1 "one"
#创建有序集合myzset 权重是1 元素是onezadd 集合名 权重 元素 权重 元素
zadd myzset 2 two 3 three
#创建多个元素zrange 集合名  索引下标范围 WITHSCORES
zrange myzset 0 -1 WITHSCORES
#打印所有元素
#不加WITHSCORES是只显示元素
#加WITHSCORES是权重和元素都显示

获取集合中的位置索引
zrank 集合名 元素
zrank myzset one
#查看位置索引zrank 集合名 元素
zrank myzset fore
#如果成员不存在返回nilzcard 集合名
zcard myzset
#查询成员数量zcont  集合名  权重范围
zcount myzset 1 2
#表示查询权重的范围
#查询权重1-2的范围之内的成员数量表示权重范围:1<=score<=3

如何删除成员和查看权重
zrem 集合名  元素
zrem myzset three
#删除成员zrange 集合名  索引下标范围 withscores
zrange myzset 0 -1 withscores
#查看所有成员,查看删除后的结果zscore 集合名 元素
zscore myzset two
#查看权重

如何对已有key进行重命名

set和hset:创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可,对一个键进行多字段存储,节省内存,使用hash方式。(一般工作中set足够)

set test 10
get testrename 键名 新键名
rename test zygg
#对键重命名

查询redis库

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

数字排名:0-15

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

dbsize
#查看当前库中键的数量keys *select 库的序号
select 1
#切换库keys *redis库是按照数字排列的:0-15 一共16个 初始位置默认是0库

移动键到其他库

move 键名   库的序号
move guoqi1 1
#把键移动到其他的库中

创建密码

config set requirepass 密码
config set requirepass 123456
#创建redis的密码
可以进入redis的库但是看不到库auth 123456
#在内声明密码redis-cli -h 20.0.0.26 -p 6379 -a 123456
#在外声明密码
#-h指定ip地址
#-p指定端口
#-a指定密码

如何清空当前库和所有库

flushdb
#清空当前库
flushall
#清空所有库不建议使用了解即可!

总结

redis的特点:读写速度快

数据类型:

1、 string(包含所有,不只是字符串)

2、 list

3、 hash 对一个键进行多字段操作要用hash 节省内存空间。只要没有持久化之前都是保存在内存当中的。

4、 无序集合 set 元素不能重复,可以用来定义唯一值

5、 有序集合zset 元素不能重复,但是权重可以相同。可以用来排名

补充

redis快的原因是什么?

1、 redis是纯内存结构。避免了磁盘I/O的耗时

2、 redis只有一个主进程,没有其他的限制。核心模块是一个单进程,减少了线程切换和回收线程资源的事件。

3、 实现I/O的多路复用机制。每一个执行线路都可以同时执行读和写。高并发的效率大大提高。

特殊说明:redis的读写仍然是单进程处理

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

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

相关文章

代码模版-实现form表单输入框和label统一对齐,vue+elementui

文章目录 背景代码 背景 通过 vue elementUI 实现 form 表单中输入框还有 label 统一对齐 代码 el-form 中每个 el-form-item 都是一个单独的小项目&#xff0c;默认 el-form-item 都是换行的&#xff0c;除非加上:inline"true" 属性&#xff0c;就是表示弄成一…

Windows通过ssh连接远程服务器并进入docker容器

Windows操作系统可以使用vscode通过ssh远程连接ubuntu服务器&#xff1a; 首先下载安装vscode&#xff0c;然后安装插件Remote-SSH&#xff1a; 通过ctlshiftP可以打开Remote-SSH&#xff1a;connect to host&#xff1b; 输入ssh Userhostname -p port host和hostname对应的是…

【计算机网络笔记】ICMP(互联网控制报文协议)

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

Tomcat web.xml文件中的mime-mapping

在Tomcat安装目录的conf/web.xml文件中&#xff0c;定义了大量的<mime-mapping>元素&#xff0c;例如&#xff1a; 其中<extension>指定了文件的扩展名&#xff0c;<mime-type>指定了mime类型&#xff0c;放在<mime-mapping>元素中&#xff0c;就是将…

排列数字(DFS深度优先搜索)

给定一个整数 n&#xff0c;将数字 1∼n 排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数 n。 输出格式 按字典序输出所有排列方案&#xff0c;每个方案占一行。 数据范围 …

非上市公司的财务报表可以找到吗?

企业财务报表 财务报表是反映企业或预算单位一定时期资金、利润状况的会计报表。我国财务报表的种类、格式、编报要求&#xff0c;均由统一的会计制度作出规定&#xff0c;要求企业定期编报。国营工业企业在报告期末应分别编报资金平衡表、专用基金及专用拨款表&#xff0c;基…

LeetCode | 19. 删除链表的倒数第 N 个结点

LeetCode | 19. 删除链表的倒数第 N 个结点 OJ链接 思路&#xff1a; 定义虚拟头节点dummy并初始化使其指向head然后定义快慢指针让快指针先走n步然后一起走最后删除倒数第n个节点然后释放虚拟节点dummy struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {…

洛谷 P4568 [JLOI2011] 飞行路线 pytho解析

P4568 [JLOI2011] 飞行路线 pytho解析 时间&#xff1a;2023.11.20 题目地址&#xff1a;[JLOI2011] 飞行路线 题目分析 对于这个题呢就是最短路的问题了。那就可以用Dijkstra 算法&#xff0c;唯一不同的地方就是有免费的机票次数&#xff0c;那我们就先不考虑这个&#xf…

【C++】标准模板库 STL 简介

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

B站短视频如何去水印?一键解析下载B站视频!

在浏览B站视频时&#xff0c;我们有时会遇到带有水印的场景。这些水印可能会干扰我们对视频内容的观看体验&#xff0c;特别是在全屏观看时。此外&#xff0c;当我们想要保存或分享这些视频时&#xff0c;水印也会成为一种障碍。因此&#xff0c;去除水印的需求就变得非常迫切。…

PXE高效批量网络装机

什么是PXE PXE是由Intel公司开发的最新技术&#xff0c;全称为“Preboot Execution Environment”&#xff08;预启动执行环境&#xff09;&#xff0c;工作于Client/Server的网络模式。它允许工作站通过网络从远端服务器下载映像&#xff0c;并由此支持通过网络启动操作系统。…

机器学习赋予用户“超人”的能力来打开和控制虚拟现实中的工具

原创 | 文 BFT机器人 最近&#xff0c;剑桥的研究人员开发了一种虚拟现实应用程序&#xff0c;只需用户手部的移动即可打开和控制一系列3D建模工具。 来自剑桥大学的研究人员利用机器学习开发了“HotGestures”类似于许多桌面应用程序中使用的热键&#xff08;快捷键&#xff…

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录&#xff0c;打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…

HTTP(Hypertext Transfer Protocol)协议

文章目录&#xff1a; 什么是HTTP&#xff1f;认识URLurlencode 和 urldecodeHTTP 协议请求和响应格式HTTP 请求&#xff08;Request&#xff09;HTTP 响应&#xff08;Response&#xff09; HTTP 请求方法HTTP 的状态码常见的Header 什么是HTTP&#xff1f; HTTP&#xff08;…

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手

随着人工智能技术的不断发展,AI助手在各行各业中扮演着越来越重要的角色。在商业领域,PPT演示是一种常见的沟通方式,而定制化的PPT大纲助手能够极大地提高PPT制作效率和质量。本文将介绍如何利用向量数据库Milvus Cloud搭建GPT大模型和私有知识库,构建一款高效的PPT大纲助手…

产品智能化成照明企业“必选题” 小匠物联交出标准答卷

7月20日&#xff0c;由佛山市科学技术局、佛山市工业和信息化局、佛山市科学技术协会指导&#xff0c;佛山市照明灯具协会主办的“2023佛山市智能照明&驱动新技术研讨会”在佛山市国家火炬创新创业园宜尚PLUS酒店隆重举行。此次会议邀请近100位知名企业产品经理和研发工程师…

金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]

文章目录 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请…

3 个常识点必须先了解!0基础入门Python!

学习一门新的语言之前&#xff0c;首先简单了解下这门语言的背景。Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;由荷兰人 Guido van Rossum 于 1989 年发明&#xff0c;第一个公开发行版发行于 1991 年。 Python 在设计上坚持了清晰划一的风格&#xff0c;这…

Xrdp+内网穿透实现远程访问Linux Kali桌面

XrdpCpolar实现远程访问Linux Kali桌面 文章目录 XrdpCpolar实现远程访问Linux Kali桌面前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于…

交易机器人-微信群通知

微信公众号:大数据高性能计算 1 背景 背景是基于人工去做交易本身无法做到24小时无时无刻的交易,主要是虚拟币本身它是24小时交易,人无法做到24小时盯盘,其次就是如果你希望通过配置更加复杂的规则甚至需要爬取最新的信息走模型进行量化交易的时候,就需要自己去做一些量化…