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

[数据库] 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.kler.cn/a/321028.html

相关文章:

  • 详解map与multimap容器
  • nginx源码安装配置ssl域名
  • (一)Ubuntu20.04服务器端部署Stable-Diffusion-webui AI绘画环境
  • 【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍
  • ubuntu 22.04 shell
  • 11.13机器学习_线性回归
  • 在Windows系统上安装的 zstd C++ 库
  • ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge
  • Spring 事务与 MySQL 事务:深度解析与实战指南
  • 使用docker创建zabbix服务器
  • 2024华为杯E题成品文章已出!
  • 使用Crawler实例进行网页内容抓取
  • 制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析
  • Python Web 分布式系统性能监控与链路追踪技术解析
  • vue实现鼠标滚轮控制页面横向滑动
  • 你知道吗?制造手机芯片的关键竟然是一台“打印机”?
  • Redis配置文件详解(上)
  • 【报告阅读】chatgpt-o1 技术报告阅读 | 新的迭代开始了~
  • 大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
  • Java 入门指南:获取对象的内存地址
  • 美信监控易的优势:长期稳定运行
  • java se 快速入门
  • 自制网络连接工具(支持tcpudp,客户端服务端)
  • SDK(1.1note)
  • Qt/C++事件过滤器与控件响应重写的使用、场景的不同
  • 【ollama 在linux 上离线部署 本地大模型】