数据库第十五课-------------非关系型数据库----------Redis

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


Redis的简单介绍

  • **作者前言**
  • 安装Redis
    • Readis的优点
    • 安装Redis
    • 配置redis
  • Reids分区
  • Redis数据类型
  • Redis操作
  • 其他操作
  • Python中的Redis操作

安装Redis

Readis的优点

  1. Reids是非关系型数据的代表,里面储存的数据类型十分多样
  2. Reids是内存型数据,读写快速
  3. 应用十分广泛

安装Redis

# 添加EPEL仓库,更新yum源
sudo yum install epel-release
sudo yum update
# 安装Redis数据库
sudo yum -y install redis
# 启动Redis服务
sudo systemctl start redis
# 进入Redis命令行模式操作
redis-cli
# 退出redis
exit

配置redis

# 进入到配置文件
sudo vim /etc/redis.conf
# 一般而言,配置文件会在这个路径下
# 允许被远程连接,注释掉这一行
# bind 127.0.0.1
# 为redis设置密码,取消注释
requirepass foobared
# foobared为密码,可以自己更改
# 保存后重启
sudo systemctl restart redis
# 因为设置了密码,所以有任何操作出现了
(error) NOAUTH Authentication required
# 可以先输入密码,1223456是具体的密码
auth 123456

在这里插入图片描述
注意一下,进入到redis命令模式后我们要输入auth 123456 后面的操作就不用再输入密码了

判断redis是否正常运行,我们输入ping来看看
在这里插入图片描述
如果回复pong就是运行成功了

Reids分区

如同是MySQL里分库一样,对不同的数据进行分区操作,有利于提高数据库的效率。通过利用多台计算机内存的和值,允许我们构造更大的数据库

# 选择redis的分区
select index
# index是分区的编号,只能是数字,默认从0开始,一般最大编号是255

在这里插入图片描述

Redis数据类型

在这里插入图片描述
有string(字符串)、 hash(哈希)、 set(集合)、list(链表)、sorted set,
图中的写法是让我们可以理解大概是啥类型
啥是链表
在这里插入图片描述
链表包含列表

列表形式(通过索引访问元素)
在这里插入图片描述
方向是从左往右,而链表是从左往右和从右往左的

Redis操作

string(字符串)
redis中,所有的数据形式都是由键值对组成的,即为 {key: value} ,其中说的数据类型,都是针对值而言

# 获取所有的键,星号* 表示任意匹配
keys *
keys 1*

在这里插入图片描述

# 设置值
set key value

在这里插入图片描述

# 获取指定的值
get key

在这里插入图片描述

# 将给定key的值设为value,并返回key原来的值
getset key value

在这里插入图片描述

# 获取一个或多个给定key的值,键之间以空格隔开
mget key1 key2

在这里插入图片描述

# 设置值,并将key的过期时间设为n(以秒为单位)
setex key n value

在这里插入图片描述
当这个key超过这个时间,就会不存在,为啥会这样呢 ?
原因是redis的全称为内存型数据库,数据本身是保存在硬盘里面的,当启动redis 就会把所有数据写到内存里面去,结束就会保存到硬盘里面

# 当key不存在时,设置值
setnx key value

在这里插入图片描述

# 返回key所储存的字符串长度
strlen key

在这里插入图片描述

# 同时设置一个或多个键值对
mset key1 value1 key2 value2
# 同时设置一个或多个键值对,当且仅当所有给定key都不存在
msetnx key1 value1 key2 value2

需要注意的是使用msetnx要保证所有的可以的key不存在

hash(哈希)
哈希里面包含字典
字典保存的形式是{key : value}

# 将哈希key中的字段field设为value
hset key field value

在这里插入图片描述

# 获取存储在哈希中指定字段的值
hget key field

在这里插入图片描述
查看h_num1 中的field字段的值,我们可以理解为h_num1={“field”: “100”}

# 获取在哈希中指定key的所有字段和值
hgetall key

在这里插入图片描述

# 获取所有哈希表中的字段
hkeys key

在这里插入图片描述

# 查看哈希key中指定的字段是否存在
hexists key field

在这里插入图片描述
存在返回1,不存在返回0

# 取哈希中所有值
hvals key

在这里插入图片描述
注意一下key和filed是不一样的,key是哈希的名称,filed是哈希里面的字段名

# 删除一个或多个哈希字段
hdel key field1 field2

在这里插入图片描述

# 获取哈希中字段的数量
hlen key

在这里插入图片描述

# 获取哈希中字段的数量
hlen key
# 获取所有给定字段的值
hmget key field1 field2
# 只有在字段field不存在时,设置哈希字段的值。
hsetnx key field value

list(链表)
在python中,列表的头部: 列名[0] 尾部:列名[-1] ,而链表是没有头部和尾部 的,两边操作都是可以的,为了更好的区分,会认为链表有头部和尾部

# 将一个或多个值写到列表头部
lpush key value1 value2

在这里插入图片描述
需要注意的是这里写入不是和python列表一样的写入,而是推入 比如我们要写入1 2 3
而结果是3 2 1 ,当1写入到第一个位置,2再写入就会把1 推到第二个位置,2占据第一,依次往复,下面的rpush命令也是一样的,还有注意的是如果内存满了,再写入数据就会报错

# 通过索引设置列表元素的值
lset key index value

在这里插入图片描述
可以修改和添加

# 在列表尾部中添加一个或多个值
rpush key value1 value2

在这里插入图片描述

# 获取列表长度
llen key
# 通过索引获取列表中的元素
lindex key index
# 获取列表指定范围内的元素,从start到end
lrange key start end

在这里插入图片描述

# 在列表的元素前或者后插入元素,pivot为目标值,value为需要插入的值
linsert key before|after pivot value

pivot是值,不是索引

在这里插入图片描述

# 移出并获取列表的第一个元素
lpop key
# 移除并获取列表的最后一个元素
rpop key
# 移除列表元素,count是数量
lrem key count value

跟python的pop()方法很像,而第三条语句是根据for循环,把找到的第一数删除掉
在这里插入图片描述
set(集合)
Redis的集合是 string 类型的无序集合,成员是唯一的,不能出现重复数据

# 查看集合
smembers key

在这里插入图片描述
需要注意的是集合是无序的,

# 向集合添加一个或多个成员
sadd key value1 value2

在这里插入图片描述
需要注意的是如果里面有相同的元素就不会添加

# 获取集合的成员数
scard key

在这里插入图片描述
我们理解为长度也可以

# 返回给定所有集合的交集
sinter key1 key2

在这里插入图片描述

# 判断value素是否是集合key的元素
sismember key value

在这里插入图片描述
存在返回1,不存在返回0

# 移除集合中一个或多个成员
srem key value1 value2

在这里插入图片描述

返回所有给定集合的并集
sunion key1 key2

在这里插入图片描述
跟mysql数据库的外连接很像

zset(sorted set:有序集合)
Redis有序集合也是string 类型的集合,不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis 是通过分数来为集合中的成员进行从小到大的排序。

# 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zadd key value1 member1 value2 member2

在这里插入图片描述
这样要注意一下,这里的先写值,再写字段,字段是唯一的,值可以相同,但是有序集合里面存储的是字段,不存储值,我们可以理解字段相当于变量,变量里面有值

# 获取有序集合的成员数
zcard key
# 查看有序集合中所有的成员
zrange key 0 -1
# 返回有序集合中指定成员的索引
zrank key member
# 移除有序集合中的一个或多个成员
zrem key  member1  member2

需要注意的是,这里value都是字段,不是字段里面的值
在这里插入图片描述

其他操作

# 删除当前库中的所有key
flushdb
# 删除数据库中的所有key
flushall
# 查看key的类型
type key

在这里插入图片描述

Python中的Redis操作

连接Redis

import redis
# db是分区
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True,
db=0)
r = redis.Redis(connection_pool=pool)

string

# 设置值,ex表示过期时间,可以不设置
r.set('key', 'value', ex=3)
# 获取值
r.get('key')
# 当key不存在时,设置值
r.setnx('key', 'value')
# 批量设置值
r.mget({'key1': 'value1', 'key2': 'value2'})
# 这时的键key1、key2不能有引号
r.mset(key1="value1", key2="value2")
# 批量获取值
r.mget("key1", "key2")
r.mget(['key1', 'key2'])
# 设置新值并获取原来的值
r.getset("key1", "value1")
# 返回key对应值的字节长度(一个汉字3个字节)
r.strlen("key")

hash​

# 单个增加或修改,存在就修改,没有就新增
r.hset("hash1", "key1", "value1")
# 取hash1中所有的key
r.hkeys("hash1")
# 单个取hash1的key1对应的值
r.hget("hash1", "key1")
# 取hash1的多个key对应的值
r.hmget("hash1", "key1", "key2")
# 只能新建
r.hsetnx("hash2", "key2", "value2")
# 批量设置
r.hmset("hash1", {"key1": "value1", "key2": "value2"})
# 取出所有的键值对
r.hgetall("hash1")
# 得到所有键值对的hash长度
r.hlen("hash1")
# 得到所有的keys
r.hkeys("hash1")
# 得到所有的value
r.hvals("hash1")
# 判断存在
r.hexists("hash1", "key1")
# 删除键值对
r.hdel("hash1", "key1")

list

# 从左边开始增加值,没有就新建
r.lpush("list1", 11, 22, 33)
# 从右边新增
r.rpush("list1", 11, 22, 33)
# 切片取出值,范围是索引号0到-1(最后一个元素)
r.lrange("list1", 0, -1)
# 向已有的列表左边添加元素,没有的话无法创建
r.lpushx("list2", 10)
r.lpushx("list1", 77)
# 向已有的列表左边添加元素,没有的话无法创建
r.rpushx("list2", 10)
r.rpushx("list1", 77)
# 指定索引号进行修改
r.lset("list1", 2, 'lalala')
# 指定值进行删除
# 将列表中左边第一次出现的"11"删除
r.lrem("list1", "11", 1)
# 删除并返回
# 删除并返回列表最左边的元素
r.lpop("list1")
# 删除并返回列表最右边的元素
r.rpop("list1")
# 根据索引取值
# 取出索引是1的值
r.lindex("list1", 1)

set

# 新增
r.sadd("set1", 1, 2, 3, 4)
# 获取元素个数
r.scard("set1")
# 获取集合中所有的值
r.smembers("set1")
# 交集
r.sinter("set1", "set2")
# 获取多个对应的集合的并集
r.sunion("set1", "set2")
# 判断是否是集合的成员
r.sismember("set1", 33)
# 指定值删除
r.srem("set1", 1)

zset

# 新增
r.zadd("zset1", value1=1, value2=2)
r.zadd("zset1", 'value3', 3, 'value4', 4)
# 获取有序集合的长度
r.zcard("zset1")
# 获取有序集合中所有元素
r.zrange("zset1", 0, -1)
# 获取有序集合中所有元素和分数
r.zrange("zset1", 0, -1, withscores=True)
# 获取值的索引号
r.zrank("zset1", "value1")
# 指定值删除
# 删除有序集合中的元素value1
r.zrem("zset1", "value1")
# 获取值对应的分数
r.zscore("zset1", "value2")
# 删除redis中的任意数据类型(string、hash、list、set、有序set)
# 删除key为gender的键值对
r.delete("gender")
# 检查名字是否存在
r.exists("zset1")
# 获取类型
r.type("set1")
r.type("hash1")
# 查询所有的Key
r.keys()
# 当前redis包含多少条数据
r.dbsize()

在python里的方法和在redis里面是一样的,没有差别

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

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

相关文章

数据结构(Java实现)-集合与时间和空间复杂度

什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之…

三星申请新商标:未来将应用于智能戒指,作为XR头显延伸设备

三星最近向英国知识产权局提交了名为“Samsung Curio”的新商标,这预示着三星正积极扩展可穿戴设备生态。该商标被分类为“Class 9”,这表明它有可能被用于未来的智能戒指。 据报道,三星计划将智能戒指作为XR头显设备的延伸,与苹果…

Qt 解析XML文件 QXmlStreamReader

如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快、更方便的Qt自己的SAX解析器(QXmlSimpleReader)的替代,它也较快,在某种情况下,比DOM(QDomDocument&…

Java学数据结构(1)——抽象数据类型ADT 表List、栈Stack和队列Qeue

目录 引出抽象数据类型(abstract data type,ADT)表ListArrayList,Vector, LinkedListArrayList手动实现与分析Vector的分析(线程安全)LinkedList 的手动实现与分析 栈stack—后进先出java中stack源码分析栈的应用:检查…

做一个蛋糕店小程序需要哪些步骤?

对于一些不懂技术的新手来说,创建蛋糕店小程序可能会感到有些困惑。但是,有了乔拓云平台的帮助,你可以轻松地创建自己的蛋糕店小程序。下面,我将为大家详细介绍一下具体的操作步骤。 首先,登录乔拓云平台并进入后台管理…

科技成果鉴定测试有什么意义?专业CMA、CNAS软件测评公司

科技成果鉴定测试是指通过一系列科学的实验和检测手段,对科技成果进行客观评价和鉴定的过程。通过测试,可以对科技成果的技术优劣进行评估,从而为科技创新提供参考和指导。 一、科技成果鉴定测试的意义 1、帮助客户了解科技产品的性能特点和…

ARM64函数调用流程分析

ARM64函数调用流程分析 1 ARM64 函数调用实例2 对应代码的分析2.1 main函数及其对应的汇编程序2.1.1 main的C代码实现2.1.2 main函数对应汇编及其分析2.1.3 执行完成之后栈的存放情况 2.2 test_fun_a函数及其对应的汇编程序2.2.1 test_fun_a函数的C实现2.2.2 test_fun_a函数对应…

帆软报表系统未授权重置授权

子曰:“父在观其志,父没观其行。三年无改于父之道,可谓孝矣。” 未授权重置授权 构造payload,访问漏洞url: /ReportServer?opfr_server&cmdsc_version_info&showtoolbarfalse漏洞证明: 文笔生…

信创测试的应用是什么

信创测试作为评估创意和创新项目的工具,为企业的发展提供了重要的支持和指导。它能够帮助企业降低风险、优化资源配置,促进创意与创新的迭代和改进。其具体应用,小编带大家一起来看看详情吧! 一、产品和服务创新 信创测试可以用于评估新产品和…

opencv 文档识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面: 识别结果界面: 查看处理图片过程: 查看历史记录界面: 二、原理介绍: 将图像变换大小->灰度化->高斯滤波->边缘检测 轮廓提取 筛选第三步中的轮廓&#xf…

Seaborn数据可视化(四)

目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据(例如,使用seaborn自带的数据集) tips sns.load_dataset("t…

架构评估-架构师之路(十二)

软件系统质量属性 软件系统质量熟悉分为 开发期质量属性 和 运行期质量属性。 质量属性 性能:指 系统的响应能力,如 响应时间,吞吐率。 设计策略:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度。 可靠…

【数据仓库】Linux、CentOS源码安装Superset

Linux、CentOS源码安装Superset步骤,遇到的各种问题。 报错问题: Linux下pip版本问题 You are using pip version 8.1.2, however version 22.2.2 is available. 解决办法: 安装python3的pip yum install python3-pip再升级 pip3 install…

Linux —— keepalived

简介 Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。 Keepalived 开源并且免费的软件。 Keepalived 的2大核心功能 1. loadbalance 负载均衡 LB:ipvs--》lvs软件…

node.js 简单使用 开始

1.概要 问:体验一下node.js 看一下如何运行。 答:使用命令 node 文件名.js 2.举例 2.1 代码准备(main.js) console.log(第一行node.js代码); 2.2 运行效果

网络安全入口设计模式

网络安全入口涵盖了几种设计模式,包括全局路由模式、全局卸载模式和健康终端监控模式。网络安全入口侧重于:全局路由、低延迟故障切换和在边缘处减轻攻击。 上图包含了3个需求。 •网络安全入口模式封装了全局路由模式。因此,实现可以将请求路…

springBoot防止重复提交

两种方法, 一种是后端实现,较复杂,要通过自定义注解和AOP以及Redis组合实现 另一种是前端实现,简单,只需通过js,设置过期时间,一定时间内,多次点击按钮只生效一次 后端实现 自定义注…

cvc-complex-type.2.4.a: 发现了以元素 ‘base-extension‘ 开头的无效内容。应以 ‘{layoutlib}‘ 等等开头

不与世俗为伍。哪怕这是自己许给自己的诅咒。 —— 宫崎骏 《红猪》 最近,在使用最新版的AndroidStudio打开一个两年前的项目时候,报了一个如下的错误:【cvc-complex-type.2.4.a: 发现了以元素 ‘base-extension‘ 开头的无效内容】。应以 ‘…

从2023年世界机器人大会发现机器人新趋势

机器人零部件为何成2023年世界机器人大会关注热门? 在原先,机器人的三大核心零部件是控制系统中的控制器、驱动系统中的伺服电机和机械系统中的精密减速器。如今,机器人的主体框架结构已经落实,更多机器人已经开始深入到各类场景中…

论文阅读 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGES

文章目录 FOCUS-AND-DETECT: A SMALL OBJECT DETECTION FRAMEWORK FOR AERIAL IMAGESABSTRACT1 Introduction2 Related Work3 Focus-and-Detect3.1 Overview3.2 Focus Stage3.2.1 Generating Ground-Truth Boxes of Focal Regions Using Gaussian Mixture Model 3.3 Detection …