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

redis tree结构 redis树形结构查询_redis tree结构

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 —— 没有查询固定的语法格式
  • redis tree结构 redis树形结构查询_redis tree结构_02

  • 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 详细安装过程请见我这篇文章 :

这里补充几个部分:

  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 的类型可以有很多,具体如下标所示:

类型

示例

String

hello wanqing

Hash

{name: “婉晴”}

List

{A ->B -> C }

Set

{A, B, C}

SortedSet

hello wanqing

上面的五种是基本数据类型

下面的三种为特殊类型

GEO

{A:{120, 30} }

BitMap

010100101

HyperLog

0101001010101

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

2.1 Redis 通用命令

  1. KEYS 返回符合模板的 Key
  2. redis tree结构 redis树形结构查询_数据库_03

  3. 示例:查询所有的键 | 查询以 n 开头的键
  4. redis tree结构 redis树形结构查询_数据结构_04

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

  1. DEL 删除指定的 key
  2. redis tree结构 redis树形结构查询_Redis_05

  3. 示例:删除指定 key, 返回删除的 个数
  4. redis tree结构 redis树形结构查询_redis_06

  5. EXISTS 判断指定 key 是否存在
  6. redis tree结构 redis树形结构查询_Redis_07

  7. 示例:判断 name 这个 key 是否存在
  8. redis tree结构 redis树形结构查询_Redis_08

  9. 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. redis tree结构 redis树形结构查询_数据库_09

  6. INCR 自增
  7. redis tree结构 redis树形结构查询_数据库_10

  8. INCRBY 定义自增值
  9. redis tree结构 redis树形结构查询_redis_11

  10. INCRBYFLOAT 为浮点数做加法
  11. redis tree结构 redis树形结构查询_redis_12


  12. redis tree结构 redis树形结构查询_redis_13

  13. SERNX 新增 —— 含有就不增,不会替换
  14. redis tree结构 redis树形结构查询_redis_14

  15. SETEX 添加 key 并设置有效期
  16. redis tree结构 redis树形结构查询_redis tree结构_15

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

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



2.3 Hash 类型

2.3.1 基础概念

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

redis tree结构 redis树形结构查询_redis_16

2.3.2 操作命令
  1. HSET: 设置值
  2. redis tree结构 redis树形结构查询_redis tree结构_17

  3. HGET: 获取值
  4. redis tree结构 redis树形结构查询_Redis_18

  5. MSET:批量设置值
  6. redis tree结构 redis树形结构查询_Redis_19

  7. MGET: 批量获取值
  8. redis tree结构 redis树形结构查询_数据结构_20

  9. HGETALL:得到所有的键值对
  10. redis tree结构 redis树形结构查询_数据库_21

  11. HKEYS: 获取指定 key 的所有 field
  12. redis tree结构 redis树形结构查询_数据结构_22

  13. HVALUE: 获取指定key的所有 field 的所有 value
  14. redis tree结构 redis树形结构查询_数据结构_23

  15. HINCRBY: 让一个 hash 类型的指定 key 的 指定 field 的 value 自增并指定步长
  16. redis tree结构 redis树形结构查询_redis tree结构_24

  17. HSETNX: 新增字段,若该值已经存在不替换
  18. redis tree结构 redis树形结构查询_数据结构_25




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. redis tree结构 redis树形结构查询_redis tree结构_26

  3. SREM : 移除指定元素
  4. redis tree结构 redis树形结构查询_redis_27

  5. SCARD : 返回 set 中元素个数
  6. redis tree结构 redis树形结构查询_数据结构_28

  7. SISMEMBER KEY MEMBER : 判断某个成员是否存在
  8. redis tree结构 redis树形结构查询_redis tree结构_29

  9. MEMBERS : 返回所有成员
  10. redis tree结构 redis树形结构查询_redis_30

  11. SINTER key1 key2: 返回两个集合的交集
  12. redis tree结构 redis树形结构查询_Redis_31

    redis tree结构 redis树形结构查询_Redis_32

  13. SDIFF key1 key2 : 返回两个集合的差集
  14. redis tree结构 redis树形结构查询_redis_33

  15. SUNION key1 key2 : 返回两个集合的并集
  16. redis tree结构 redis树形结构查询_Redis_34




2.6 SortedSet 类型

2.6.1 基础概念

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

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

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

2.6.2 操作命令
  1. ZADD : 添加元素到指定 key 的 SortedSet
  2. redis tree结构 redis树形结构查询_数据结构_35


  3. redis tree结构 redis树形结构查询_Redis_36

  4. ZREM : 删除元素
  5. redis tree结构 redis树形结构查询_Redis_37

  6. ZSCORE : 统计指定元素的分数值
  7. redis tree结构 redis树形结构查询_redis tree结构_38

  8. ZRANK : 得到某个元素按 score 排序的排名 ( 默认从 0 开始 )
  9. redis tree结构 redis树形结构查询_Redis_39


  10. redis tree结构 redis树形结构查询_redis_40

  11. ZCARD: 得到指定集合中元素个数
  12. redis tree结构 redis树形结构查询_Redis_41

  13. ZCOUNT KEY MIN MAX : 得到指定范围的元素个数
  14. redis tree结构 redis树形结构查询_Redis_42

  15. ZINCRBY : 对某个元素按指定值自增
  16. redis tree结构 redis树形结构查询_数据结构_43

  17. ZRANGE KEY MIN MAX : 得到某个范围内的元素值
  18. redis tree结构 redis树形结构查询_redis_44

  19. ZRANGEBYSCORE KET MIN MAX : 获取按照 score 排序后,指定 score 范围的元素
  20. redis tree结构 redis树形结构查询_redis_45

  21. ZDIFF ZINTER ZUNION : 交集 并集 差集操作
    其默认排序为升序,在对所有命令 Z 后加 REV 就变为降序查询,示例如下:

redis tree结构 redis树形结构查询_redis tree结构_46