[数据库] Redis学习笔记(一):介绍、安装、基本数据结构、常见命令

Redis学习笔记

简介

NoSQL

  • NoSQL:非关系型数据库
  • 特征:
    • 非结构化:数据约束松散,如键值型/文档型/列类型/图型
    • 无关联:不维护表之间的关联
    • 非SQL:没有固定统一的语法格式
    • BASE:无法满足ACID
    • 存储在内存中,性能较高
    • 支持水平扩展
  • 适用场景:
    • 数据结构不固定
    • 对一致性、安全性要求不高
    • 对性能要求高

Redis

  • Redis:全称 Remote Dictionary Server (远程辞典服务器),是一个基于内存的键值型NoSQL数据库
  • 特征:
    • 键值型,value 支持多种不同的数据结构,功能丰富
    • 单线程,每个命令具备原子性
    • 低延迟,速度快(基于内存、IO多路复用、良好的编码)
    • 支持数据持久化
    • 支持主从集群、分片集群
    • 支持多语言客户端

初次使用

安装与配置

笔者使用的是 Arch Linux 操作系统,因此仅对此说明

  1. 安装
sudo pacman -S redis
  1. 服务启动
sudo systemctl start redis
  1. 服务开机启动
sudo systemctl enable redis
  1. 查看服务状态
sudo systemctl status redis
  1. 配置文件
    配置文件地址:/etc/redis/redis.conf
# 修改监听地址:将下面这行注释掉,添加自己需要的ip
bind 127.0.0.1 -::1
# 设置访问密码
requirepass 123456
# 监听端口
port 6379
# 最大内存占用
maxmemory 512mb
# 日志文件
logfile "redis.log"

命令行客户端

开启 Redis 命令行客户端的命令:

redis-cli [options] [commands]

一般来说,使用如下命令启动客户端:

redis-cli -p 6379

启动客户端后,需要输入登录信息:

AUTH wxy3265 123456

如果未设置用户名,只需输入密码:

AUTH 123456

检查连接:

ping

若输出为 PONG ,说明连接成功

Key 的层级结构

Redis 的 key 允许有多个单词形成层级结构,多个单词之间用 : 隔开,格式:项目名:业务名:类型:id
该格式并非固定,可以根据自己的需求修改,如:

eastwood:student:1
eastwood:classes:1

如果 value 是一个 Java 对象,例如一个 User 对象,则可以将对象序列化为 JSON 字符串后存储:

keyvalue
eastwood:student :1{“id”:1, “name”:“steve”, “score”: “85”}
eastwood:classes:1{“id”: 1, “name”:“ClassA”}

命令与数据结构

官方文档:https://redis.io/commands

通用命令

  • help [command]:查看一个命令的用法
  • KEYS
    说明:查看符合模板的所有 key (可使用通配符模糊查询)。效率较低,不建议在生产环境设备上使用
    例:KEYS *
  • DEL
    说明:删除一个或多个指定的 KEY 。如果包含不存在的 key ,则只删除存在的部分,返回删除的条数。
    例:DEL k1 k2 k3
  • EXISTS
    说明:判断 key 是否存在
    例:EXIST k
  • EXPIRE
    说明:给一个 key 设置有效期,有效期到期时该 key 会被自动删除
    例:EXPIRE k 10
  • TTL
    说明:查看一个 key 的剩余有效期,永久数据返回 -1 ,数据不存在返回 -2
    例:TTL k

String

介绍
  • String:字符串类型,是 Redis 中最简单的存储类型。
  • 类型:
    • string:普通字符串
    • int:整数类型,可以做自增、自减操作
    • float:浮点类型,可以做自增、自减操作
  • 无论类型,底层均为字节数组存储,但编码方式不同
  • 字符串类型的最大空间不能超过512MB
常见命令
  • SET:添加或修改已经存在的一个 String 类型的键值对
  • GET:根据 key 获取 String 类型的 value
  • MSET:批量添加多个 String 类型的键值对
  • MGET:根据多个 key 获取多个 String 类型的 value
  • INCR:让一个整型的 key 自增1
  • INCRBY:让一个整型的 key 自增并指定步长,如 INCRBY num 2 为让 num 自增 2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行
  • SETEX:添加一个 String 类型的键值对,并且指定有效期

Hash

介绍
  • Hashvalue 是一个无序字典,类似于 Java 中的 HashMap 结构。
  • Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段做 CRUD
常见命令
  • HSET key field value:添加或修改 hash 类型 key 的 fi`eld 的值
  • HGET key field:获取一个 hash 类型的 keyfield 的值
  • HMSET:批量添加
  • HMGET:批量获取
  • HGETALL:获取一个 hash 类型的 key 中的所有的 fieldvalue
  • HKEYS:获取一个 hash 类型的 key 中的所有 field
  • HVALS:获取一个 hash 类型的 key 中的所有 value
  • HINCRBY:让一个 hash 类型 key 的字段值自增并指定步长
  • HSETNX:添加一个 hash 类型的 keyfield 值,前提是这个 field 不存在,否则不执行

List

介绍
  • List 与 Java 中的 LinkedList 类似,可以看作是一个双向链表结构。既可以支持正向检索也可以支持反向检索。
  • 特征
    • 有序
    • 元素可以重复
    • 插入和删除快
    • 查询速度一般
  • 常用于保存对顺序有要求的数据,如点赞、评论
常见命令
  • LPUSH key element ...:向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回 nil
  • RPUSH key element:向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOPBRPOP:与 LPOPRPOP 类似,但在没有元素时等待指定时间,而不是直接返回 nil

Set

介绍
  • Set 与 Java 中的 HashSet 类似,可以看作一个 valuenullHashMap 。因为也是一个 hash 表,因此具备与 HashSet 类似的特征:
    • 无序
    • 元素不可重复
    • 查找快
    • 支持交集、并集、差集等功能
常见命令
  • SADD key member ...:向 set 中添加一个或多个元素
  • SREM key member ...:移除 set 中的指定元素
  • SCARD key:返回 set 中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于 set 中,返回 1/0
  • SMEMBERS:获取 set 中的所有元素
  • SINTER key1 key2 ...:求 key1key2 的交集
  • SDIFF key1 key2 ...:求 key1key2 的差集
  • SUNION key1 key2 ...:求 key1key2 的并集

SortedSet

介绍
  • SortedSet 是一个可排序的 set 集合,与 Java 中的 TreeSet 有些类似,但底层数据结构却差别很大。 SortedSet 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序,底层的实现是一个跳表(SkipList) 加 hash 表。
  • 特性
    • 可排序
    • 元素不重复
    • 查询速度快
  • 因为其可排序特性,常用于实现排行榜这样的功能。
常见命令
  • ZADD key score member:添加一个或多个元素到 sorted set ,如果已存在则更新 score 值。
  • ZREM key member:删除 sorted set 中的一个指定元素
  • ZSCORE key member:获取 sorted set 中的指定元素的 score 值
  • ZRANK key member:获取 sorted set 中的指定元素的排名
  • ZCARD key:获取 sorted set 中的元素个数
  • ZCOUNT key min max:统计 score 值在给定范围内的所有元素个数
  • ZINCRBY key increment member:让 sorted set 中的指定元素自增,步长为指定的 increment 值
  • ZRANGE key min max:按照 score 排序后,获取指定 score 范围内的元素
  • ZDIFFZINTERZUNION:求差集、交集、并集

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

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

相关文章

【Linux】当前进展

驱动层日志添加了下文件目录,函数,代码行的打印(这里要小心,驱动目录源代码打印日志里边添进程号可能有问题,因为在驱动初始化的时候,内核还没有创建进程,不过猜测可以先不打印进程相关信息&…

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …

算法.图论-并查集

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板4. 并查集习题4.1 情侣牵手4.2 相似字符串组 1. 并查集介绍 定义: 并查集是一种树型的数据结构,用于处理一些不…

SentencePiece进行文本分类

SentencePieces 前言 Step1:故事 SentencePiece 是一个无监督的文本分词器和 detokenizer(还原回去的?)主要用于词汇表大小是预定的文本生成系统中它拓展了原始句子的训练,实现子词单元如 BPE 和 unigram language model技术亮点 纯数据驱动&#xff…

Azure Kinect 人体跟踪关节

Azure Kinect 人体跟踪关节 azure kinect dk 提取人体骨骼 要在Azure Kinect DK上提取人体骨骼,你需要使用Azure Kinect SDK和OpenPose库。以下是一个简化的代码示例,展示如何集成这两个库来提取骨骼关键点: 首先,确保你已经安装…

Web3Auth 如何工作?

Web3Auth 用作钱包基础设施,为去中心化应用程序 (dApp) 和区块链钱包提供增强的灵活性和安全性。在本文档中,我们将探索 Web3Auth 的功能,展示它如何为每个用户和应用程序生成唯一的加密密钥提供程序。 高级架构 Web3Auth SDK 完全存在于用…

软件测试基础篇

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “尽早的介入测试,遇到问题的解决成本就越低” 随着软件测试技术的发展,测试工作由原来单一的寻找缺陷逐渐发展成为预防缺陷,…

文章解析: 一不小心掉入了 Java Interface 的陷阱

一不小心掉入了 Java Interface 的陷阱_腾讯新闻 import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List;// 方便起见就都放在一个文件中了 public class TestSimpleResult {public static void ma…

Rust和Go谁会更胜一筹

在国内,我认为Go语言会成为未来的主流,因为国内程序员号称码农,比较适合搬砖,而Rust对心智要求太高了,不适合搬砖。 就个人经验来看,Go语言简单,下限低,没有什么心智成本&#xff0c…

华为认证HCIA篇--网络通信基础

大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景: 平常做rom相关开发时候经常需要与settings值打交道,需要独立或者存储一个settings的场景,群里有个学员朋友就问了一个疑问,那就是Settings的putString方式来存储字符,那么可以存储的最大字符是多少呢&#xff1…

Excel锁定单元格,使其不可再编辑

‌在Excel中,锁定单元格后仍然可以编辑‌,这主要涉及到对特定单元格或区域的锁定与保护工作表的设置。以下是实现这一功能的具体步骤: ‌解除工作表的锁定状态‌:首先,需要全选表格(使用CtrlA快捷键&#x…

[数据集][目标检测]中草药类型识别检测数据集VOC+YOLO格式7976张45类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7976 标注数量(xml文件个数):7976 标注数量(txt文件个数):7976 标注…

AI公司的妄念:招个AI产品经理来想idea

AI公司在探索方向时,一旦老板或负责人的想法陷入瓶颈(或没时间想特别细分的方向),往往会希望招一个AI产品经理来想idea(创新/探索新方向),预期他某天突然想出个特别好的idea。 一、这个思路&…

【机器学习】12-决策树1——概念、特征选择

机器学习10-决策树1 学习样本的特征,将样本划分到不同的类别(分类问题)或预测连续的数值(回归问题)。 选择特征,划分数据集,划分完成形成模型(树结构),一个…

OSI 七层模型和TCP/IP 四层模型的区别

目录 OSI 七层模型 介绍 1. 物理层(Physical Layer) 2. 数据链路层(Data Link Layer) 3. 网络层(Network Layer) 4. 传输层(Transport Layer) 5. 会话层(Session …

【网络安全】基础知识详解(非常详细)零基础入门到精通,收藏这一篇就够了

一、什么是网络安全? 百度上对“网络安全”是这么介绍的: 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露、系统连续可靠正常地运行,网络服务不中断。” 嗯…是不…

地表最强开源大模型!Llama 3.2,如何让你的手机变身私人智能助理

你有没有想过,为什么现在的手机越来越像小型电脑?无论是拍照、看视频,还是用各种APP,甚至是AI助手,手机的功能几乎无所不能。其实,这一切的背后有一个技术正在悄悄改变我们的生活,那就是Llama 3…

开发手札:内网开发Unity导致操作和编译卡顿的问题

最近一个工程切换了最新的unity和packages,在外网开发没什么问题,切换到内网接入保密开发后,发现不论是操作编辑器还是编译代码,巨卡无比。 以上是仅仅写了一句int a 1;后,编译代码的速度。 经过分…

初试Bootstrap前端框架

文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页,查看结果5、登录按钮事件处理6、浏览网页,查看结果 三、实战小结 一、Bootstrap概述 大家好,今天我们将一起学习一个非常流行的前端框架——Boot…