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

发布于:2024-10-13 ⋅ 阅读:(47) ⋅ 点赞:(0)

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 字符串后存储:

key value
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:求差集、交集、并集