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的读写,依旧是单进程处理。

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

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

相关文章

实验7设计建模工具的使用(三)

二,实验内容与步骤 1. 百度搜索1-2张状态图,请重新绘制它们,并回答以下问题: 1)有哪些状态; 2)简要描述该图所表达的含义; 要求:所绘制的图不得与本文中其它习题一样…

python django 小程序图书借阅源码

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

神经网络中BN层简介及位置分析

1. 简介 Batch Normalization是深度学习中常用的技巧,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名,明明是Standardization, 非…

【考研数学】数学一“背诵”手册(一)| 高数部分(2)

文章目录 引言一、高数级数空间解析几何球坐标变换公式零碎公式 写在最后 引言 高数一篇文章还是写不太下,再分一些到这里来吧 一、高数 级数 阿贝尔定理:若级数 ∑ a n x n \sum a_nx^n ∑an​xn 当 x x 0 xx_0 xx0​ 时收敛,则适合不…

计算机毕业设计选题推荐-点餐微信小程序/安卓APP-项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

边缘计算多角色智能计量插座 x 资产显示标签:实现资产追踪与能耗管理的无缝结合

越来越多智慧园区、智慧工厂、智慧医院、智慧商业、智慧仓储物流等企业商家对精细化、多元化智能生态应用场景的提升,顺应国家节能减排、环保的时代潮流,设计一款基于融合以太网/WiFi/蓝牙智能控制的智能多角色插座应运而生,赋予智能插座以遥…

微博头条文章开放接口报错 auth by Null spi

接口文档地址 https://open.weibo.com/wiki/Toutiao/api 接口说明 https://api.weibo.com/proxy/article/publish.json 请求方式 POST 请求参数 参数名称类型是否必需描述titlestring是文章标题,限定32个中英文字符以内contentstring是正文内容,限制9…

竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…

Java 编码

编码: 加密: 通过加密算法和密钥进行 也可通过码表进行加密 对称加密: 缺点:可被截获 元数据---加密算法密钥密文 ----> 解密算法密钥元数据 算法:DES(短 56位),AES(长 128位)破解时间加长 非对称加密: 元数据-加密算法加密密钥 密文 --->加密算法解密密钥元数据 …

轻量封装WebGPU渲染系统示例<38>- 动态构建WGSL材质Shader(源码)

实现原理: 基于宏定义和WGSL文件系统实现(还在完善中...) 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/DynamicShaderBuilding.ts 当前示例运行效果: 此示例基于此渲染系统实现,当前示例TypeScript…

高防服务器的工作原理

在当今互联网时代,网络安全问题日益突出,各种网络攻击层出不穷。为了保护企业的网络安全,高防服务器应运而生。那么,你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种…

浅谈WPF之各种Template

前几天写了一篇文章【浅谈WPF之控件模板和数据模板】,有粉丝反馈说这两种模板容易弄混,不知道什么时候该用控件模块,什么时候该用数据模板,以及template和itemtemplate之间的关系等,今天专门写一篇文章,简述…

全局定制序列化

作用:将返回实体类中的属性如果为null 变成"" package com.example.micrweb.config;import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.f…

vscode自动添加函数注释头插件使用方法

前言 在我们使用vscode编写程序时,经常需要为新增的函数编写注释,这样一来就会耗费不少时间在函数注释头格式操作上。本文介绍使用vscode的函数注释头自动添加插件的使用方法,提高工作效率。 1 安装Doxygen Documentation Generator插件 1…

代码规范之-理解ESLint、Prettier、EditorConfig

前言 团队多人协同开发项目,困扰团队管理的一个很大的问题就是:无可避免地会出现每个开发者编码习惯不同、代码风格迥异,为了代码高可用、可维护性,需要从项目管理上尽量统一和规范代码。理想的方式需要在项目工程化方面&#xff…

前端实现表格生成序号001、002、003自增

我们最终想要实现的效果如图&#xff0c;从后端获取数据之后&#xff0c;不使用data中的id&#xff0c;而是使用自己生成的按照顺序自增的序号id。 script <template><el-table :data"sticker" border style"width: 100%" id"stickerList&q…

本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)

按照固有思维方式&#xff0c;深度学习的训练环节应该在云端&#xff0c;毕竟本地硬件条件有限。但事实上&#xff0c;在语音识别和自然语言处理层面&#xff0c;即使相对较少的数据量也可以训练出高性能的模型&#xff0c;对于预算有限的同学们来说&#xff0c;也没必要花冤枉…

网络渗透测试(wireshark 抓取QQ图片)

1.打开wireshark 这里我用的wifi连接 所以点开wifi就好 打开wifi之后就开始在本机上进行抓包了 我们先给我们的QQ发送一张图片&#xff0c;用自己的手机发送给电脑 然后点击左上角的正方形&#xff0c;停止捕获抓包 QQ的关键词是oicq&#xff0c;所以我们直接找 打开oicq …

逸学java【初级菜鸟篇】9.3 Stream流

hi&#xff0c;我是逸尘&#xff0c;一起学java吧 得益于Lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream流概念&#xff08;就是都基本使用lambda的形式&#xff09;。 流处理 我们首先理解什么是流处理&#xff0c;它类似于sql语句&#xff0c;可以执行非常复…

【每日OJ —— 622. 设计循环队列】

每日OJ —— 622. 设计循环队列 1.题目&#xff1a;622. 设计循环队列2.解法2.1.解法讲解2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;622. 设计循环队列 2.解法 1.本题有很多解法&#xff1a;可以使用数组&#xff0c;单链表&#xff0c;双链表&#x…