【Redis】Redis 的基础数据结构 以及 各种数据结构常用命令使用示例

本文主要介绍 Redis 基础,包括什么是 Redis 、Redis 数据结构有那些 以及 各种Redis 数据结构的常用操作命令

在这里插入图片描述

1. 初始 Redis

1.1 NoSQL 数据库 —— 非关系型数据库
  • SQL
    1) 结构化 -—— 例如 MySQL 中的表结构 (不建议修改,初始时就要设计好)
    2) 关联的 —— MySQL 中的外键
    3) SQL 查询 —— 查询语法是固定的
    4)具有事务需求 —— 底层具有事务的实现,满足 ACID
    5)磁盘存储

    使用场景:数据结构固定;业务对数据安全性、一致性要求较高

  • NoSQL
    1) 非结构化 —— 如 Redis 就是一种键值型数据库 ,除此之外还有文档型数据库(MongoDB)、列类型数据库(HBase)、图数据库( Neo4j — 常用于社交 app)等
    2) 无关联 —— 想建立关联,要通过嵌套存储实现
    3) 非 SQL —— 没有查询固定的语法格式
    在这里插入图片描述
    4) 不能满足事务需求 —— BASE
    5) 内存存储

    使用场景:数据结构不固定、对一致性、安全性要求不高、对性能要求高

1.2 认识 Redis

Redis 全程 Remote Dictionary Server ,远程词典服务器,其是一个基于内存的键值型 NoSQL 数据库。它具有如下特点:

特点

  1. 键值型
  2. 单线程 —— 每个命令原子性 (6.0 核心部分也是单线程,只是网络部分进行了多线程的处理)
  3. 低延迟、速度快 (基于内存 – 快的核心原因、IO多路复用、良好的编码 - C语言)
  4. 支持数据的持久化 —— 定期将数据持久化到磁盘
  5. 支持主从集群、分片集群
  6. 支持多语言客户端 (C、Java 等都能用)
1. 3 安装 Redis

Redis 详细安装过程请见我这篇文章 : https://blog.csdn.net/liuwanqing233333/category_12100788.html?spm=1001.2014.3001.5482

这里补充几个部分:

  1. 设置任何机器都能访问 , 在 redis.conf 中修改:
bind 0.0.0.0
  1. 设置 Redis 后台运行
daemonize yes 
  1. 设置 Redis 日志文件
logfile "redis.log"
  1. 设置 Redis 开机自启动

1) 新建一个系统服务文件

vi /etc/systemd/system/redis.service

在里面输入:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf # 这里要改成你自己的 redis 配置文件地址
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2)重载系统服务

systemctl daemon-reload

3)通过如下命令操作 Redis

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

4)设置 Redis 开机自启

systemctl enable redis

补充: vi 编辑器搜索某个特定单词的方法为 : 命令模式输入 /单词拼写 + enter 键,这样可以快速帮我们定位到要修改的那几个位置

2. Redis 常见命令

Redis 是一个键值型数据库,key 一般为 String 类型,value 的类型可以有很多,具体如下标所示:

类型示例
Stringhello wanqing
Hash{name: “婉晴”}
List{A ->B -> C }
Set{A, B, C}
SortedSethello wanqing
上面的五种是基本数据类型下面的三种为特殊类型
GEO{A:{120, 30} }
BitMap010100101
HyperLog0101001010101

Redis 中文命令手册地址:https://www.redis.net.cn/order/

2.1 Redis 通用命令
  1. KEYS 返回符合模板的 Key
    在这里插入图片描述
    示例:查询所有的键 | 查询以 n 开头的键
    在这里插入图片描述

    注释: 这种模糊查询是效率非常低的,而且 Redis 是单线程的,容易造成阻塞 —— 主从模式,在从节点上可以用,主节点上不要用

  2. DEL 删除指定的 key
    在这里插入图片描述
    示例:删除指定 key, 返回删除的 个数
    在这里插入图片描述

  3. EXISTS 判断指定 key 是否存在
    在这里插入图片描述
    示例:判断 name 这个 key 是否存在
    在这里插入图片描述

  4. EXPIRE 给 key 设置有效期 、 TTL 查看剩余有效期

    在这里插入图片描述
    示例: 给 name 这个 key 设置有效期为 30 s ,通过 TTL 查询有效期
    在这里插入图片描述



2.2 String 类型
2.2.1 基础概念

String 类型是 Redis 中最简单的值,按照其格式不同,又分为:

  • string
  • int
  • float

这三种类型底层都用字符数组进行存储,但是数字类型的在存储时底层编码不同,其会转成二进制去存储,更节省空间。字符串类型最大空间不能超过 512 m 。

2.2.2 操作命令
  1. SET

  2. GET

  3. MSET 批量新增

  4. MGET 批量获取
    在这里插入图片描述

  5. INCR 自增
    在这里插入图片描述

  6. INCRBY 定义自增值
    在这里插入图片描述

  7. INCRBYFLOAT 为浮点数做加法
    在这里插入图片描述
    在这里插入图片描述

  8. SERNX 新增 —— 含有就不增,不会替换
    在这里插入图片描述

  9. SETEX 添加 key 并设置有效期
    在这里插入图片描述

扩展: 如果 Value 是一个对象,我们可以将 对象 序列化为 json 字符串进行存储,示例如下:

'{"id":1, "name":"小米11优惠券", "price": 100}'



2.3 Hash 类型
2.3.1 基础概念

当我们要存储对象时,将对象序列化为 json 字符串存储很不方便,同时也很难对某个字段单一修改。因此,我们要有 Hash 类型,用 Hash 中的多个键值对的集合表示对象,如下图所示:

在这里插入图片描述

2.3.2 操作命令
  1. HSET: 设置值
    在这里插入图片描述

  2. HGET: 获取值
    在这里插入图片描述

  3. MSET:批量设置值
    在这里插入图片描述

  4. MGET: 批量获取值
    在这里插入图片描述

  5. HGETALL:得到所有的键值对
    在这里插入图片描述

  6. HKEYS: 获取指定 key 的所有 field
    在这里插入图片描述

  7. HVALUE: 获取指定key的所有 field 的所有 value
    在这里插入图片描述

  8. HINCRBY: 让一个 hash 类型的指定 key 的 指定 field 的 value 自增并指定步长
    在这里插入图片描述

  9. HSETNX: 新增字段,若该值已经存在不替换
    在这里插入图片描述




2.4 List 类型
2.4.1 基础概念

和 Java 中的 LinkedList 类似, List 类型可以看作双向链表结构,支持正向逆向检索。具有下列特点:

  • 插入快
  • 查询速度一般
  • 有序
  • 元素可以重复

其使用场景为: 保存对顺序有要求的数据,如 点赞、评论 等按照时间顺序展示的数据

2.4.2 操作命令
  1. LPUSH : 从左侧插入
  2. LPOP : 从左侧取出
  3. RPUSH : 从右侧插入
    在这里插入图片描述
    在这里插入图片描述
    4. RPOP : 从右侧取出在这里插入图片描述5. LRANGE KEY STAR END : 取出一定范围的数据
    6. BLPOP BRPOP : 在取元素时,若没有指定元素,等待指定时间,不是直接返回 nil —— 阻塞式获取
    在这里插入图片描述

利用 List 结构模拟栈、队列、阻塞队列

1) List 模拟栈 —— 先进先出 —— 入口出口在一起
2) List 模拟队列 —— 先进后出 —— 入口出口不在一起
3)阻塞队列 —— 队列:入口出口不同 + BLPOP / BRPOP




2.5 Set 类型
2.5.1 基础概念

Redis 中 Set 结构与 Java 中 HashSet 类似,其具有 HashSet 的特点:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集 等—— 与 HashSet 不同的
2.5.2 操作命令
  1. SADD : 添加一个或多个元素
    在这里插入图片描述

  2. SREM : 移除指定元素
    在这里插入图片描述

  3. SCARD : 返回 set 中元素个数
    在这里插入图片描述

  4. SISMEMBER KEY MEMBER : 判断某个成员是否存在
    在这里插入图片描述

  5. MEMBERS : 返回所有成员
    在这里插入图片描述

  6. SINTER key1 key2: 返回两个集合的交集
    在这里插入图片描述在这里插入图片描述

  7. SDIFF key1 key2 : 返回两个集合的差集
    在这里插入图片描述

  8. SUNION key1 key2 : 返回两个集合的并集
    在这里插入图片描述




2.6 SortedSet 类型
2.6.1 基础概念

Redis 中的 SortedSet 是一个可排序的 set 集合,与 Java 中的 TreeSet 有点类似,但是底层数据结构差别很大。SortedSet 中的每个元素都带有一个 score 属性,可以基于 score 属性对元素排序,它的底层实现是一个跳表 ( SkipList )加 hash 表。其具有以下特性:

  • 可排序
  • 元素不可以重复
  • 查询速度快

常用场景: 常用来实现 排行榜 功能

2.6.2 操作命令
  1. ZADD : 添加元素到指定 key 的 SortedSet
    在这里插入图片描述
    在这里插入图片描述

  2. ZREM : 删除元素
    在这里插入图片描述

  3. ZSCORE : 统计指定元素的分数值
    在这里插入图片描述

  4. ZRANK : 得到某个元素按 score 排序的排名 ( 默认从 0 开始 )
    在这里插入图片描述
    在这里插入图片描述

  5. ZCARD: 得到指定集合中元素个数
    在这里插入图片描述

  6. ZCOUNT KEY MIN MAX : 得到指定范围的元素个数
    在这里插入图片描述

  7. ZINCRBY : 对某个元素按指定值自增
    在这里插入图片描述

  8. ZRANGE KEY MIN MAX : 得到某个范围内的元素值
    在这里插入图片描述

  9. ZRANGEBYSCORE KET MIN MAX : 获取按照 score 排序后,指定 score 范围的元素
    在这里插入图片描述

  10. ZDIFF ZINTER ZUNION : 交集 并集 差集操作

    其默认排序为升序,在对所有命令 Z 后加 REV 就变为降序查询,示例如下:

    在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值