掘金 后端 ( ) • 2024-04-29 08:56

引言

MySQL是一种关系型数据库,通过表和字段来存储信息,表与表之间通过 ID 关联。它使用 SQL 语言进行数据的增删改查操作。
由于 MySQL 是基于硬盘存储,并且需要解析执行 SQL 语句,这可能会导致性能瓶颈。
通常情况下,服务端执行计算的速度很快,但等待数据库查询结果的过程却较为缓慢。

redis 简介

在计算机科学领域,性能优化的常见策略之一是使用缓存(cache)。考虑到内存与硬盘速度的显著差异,我们通常会采用内存数据库,如 Redis 作为缓存,以提高数据访问速度。
Redis 通常用作数据库、缓存或消息传递中间件。它以键值对(key-value pair)的形式设计,支持多种类型的值,例如:

  • 字符串(String)
  • 列表(List)
  • 集合(Set)
  • 有序集合(Sorted Set)
  • 哈希表(Hash)
  • 地理信息(Geospatial)
  • 位图(Bitmap)

Redis 的使用

在 Docker Desktop 中搜索 Redis,点击 Run:
image.png
将宿主机的 6379 端口映射到容器内的 6379 端口,以便通过本机端口访问容器内 Redis 服务。

将宿主机的目录挂载到容器内的 /data 目录,确保数据保存在本机:
image.png
运行成功后:
image.png
files 里可以看到所有的容器内的文件:
image.png
这个 mounted 标志代表挂载的目录。
我们在本地目录添加一个文件:
image.png
在容器内的 data 目录就能访问到这个文件了:
image.png
同样,在容器内修改了 data 目录,那本机目录下也会修改。
使用 redis 也可以将数据持久化到硬盘。,不用 mysql。

Redis 命令行操作

在 terminal 输入 redis-cli,进入交互模式:
image.png

字符串操作

set、get:
image.png
incr 用于递增:
image.png
适用于计数场景,如阅读量、点赞量。
使用 keys 命令,查询有哪些 key。keys 后支持模式匹配,如使用 * 查询所有键。
image.png

Redis GUI工具

这里的 GUI 工具用官方的 RedisInsight
点击 add database:
image.png
连接信息用默认的就行:
image.png
然后就可以看到新建的这个链接:
image.png
点击它就可以可视化看到所有的 key 和值:
image.png
同样也可以执行命令:
image.png

其他 Redis 数据结构

列表(List):

lpush:从列表左侧添加元素

lpush list1 111
lpush list1 222
lpush list1 333

执行上面的命令,点击刷新,就可以最新值:
image.png

rpush:从列表右侧添加元素

rpush list1 444
rpush list1 555

image.png

lpop:从左侧移除元素

lpop list1

image.png

rpop:从右侧移除元素

rpop list1

image.png

lrange:获取列表中的元素

image.png
lrange list1 0 -1 就是查询 list1 的全部数据。

集合(Set)

set 的特点是无序并且元素不重复。

sadd:添加元素,自动去重

sadd set1 111
sadd set1 111
sadd set1 111
sadd set1 222
sadd set1 222
sadd set1 333

刷新之后就可以看到它去重后的数据:
image.png

sismember:检查元素是否属于集合

sismember set1 111

image.png

sismember set1 444

image.png

有序集合(Sorted Set/ZSet)

zadd:添加元素,并指定分数(排序依据)

zadd zset1 4 yun
zadd zset1 2 yu
zadd zset1 1 dai
zadd zset1 3 mu

会按照分数来排序:
image.png

zrange:按分数获取元素

通过 zrange 命令取数据,比如取排名前三的数据:
image.png

哈希表(Hash)

hset:设置键值对

hset hash1 key1 1
hset hash1 key2 2
hset hash1 key3 3
hset hash1 key4 4
hset hash1 key5 5

image.png

hget:获取键对应的值

hget hash1 key3

image.png

地理信息(Geo)

geo 的数据结构存储经纬度信息,根据距离计算周围的人用的:

geoadd:添加地理坐标

用 loc 作为 key,分别添加 yunyun 和 mumu 的经纬度:

geoadd loc 13.361389 38.115556 "yunyun" 15.087269 37.502669 "mumu" 

redis 实际使用 zset 存储的,把经纬度转化为了二维平面的坐标:
image.png

geodist:计算两个坐标点之间的距离

geodist loc yunyun mumu

image.png

georadius:搜索指定半径内的其他点

传入经纬度、半径和单位:

georadius loc 15 37 200 km
georadius loc 15 37 100 km

image.png

Redis的过期时间

Redis 的键可以通过 expire 命令设置过期时间,使用 ttl 命令查询剩余过期时间。
比如我设置 yun 的 key 为 30 秒过期:

expire yun 30

等到了过期时间就会自动删除。
想查看剩余过期时间使用 ttl:
image.png
所有的命令都可以在官方文档查: redis.io/commands/