快速入门 redis
引言
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:将宿主机的 6379 端口映射到容器内的 6379 端口,以便通过本机端口访问容器内 Redis 服务。
将宿主机的目录挂载到容器内的 /data 目录,确保数据保存在本机:运行成功后:
files 里可以看到所有的容器内的文件:
这个 mounted 标志代表挂载的目录。我们在本地目录添加一个文件:
在容器内的 data 目录就能访问到这个文件了:
同样,在容器内修改了 data 目录,那本机目录下也会修改。使用 redis 也可以将数据持久化到硬盘。,不用 mysql。
Redis 命令行操作
在 terminal 输入 redis-cli,进入交互模式:
字符串操作
set、get:incr 用于递增:
适用于计数场景,如阅读量、点赞量。使用 keys 命令,查询有哪些 key。keys 后支持模式匹配,如使用 * 查询所有键。
Redis GUI工具
其他 Redis 数据结构
列表(List):
lpush:从列表左侧添加元素
lpush list1 111
lpush list1 222
lpush list1 333
执行上面的命令,点击刷新,就可以最新值:
rpush:从列表右侧添加元素
rpush list1 444
rpush list1 555
lpop:从左侧移除元素
lpop list1
rpop:从右侧移除元素
rpop list1
lrange:获取列表中的元素
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
刷新之后就可以看到它去重后的数据:
sismember:检查元素是否属于集合
sismember set1 111
sismember set1 444
有序集合(Sorted Set/ZSet)
zadd:添加元素,并指定分数(排序依据)
zadd zset1 4 yun
zadd zset1 2 yu
zadd zset1 1 dai
zadd zset1 3 mu
会按照分数来排序:
zrange:按分数获取元素
通过 zrange 命令取数据,比如取排名前三的数据:
哈希表(Hash)
hset:设置键值对
hset hash1 key1 1
hset hash1 key2 2
hset hash1 key3 3
hset hash1 key4 4
hset hash1 key5 5
hget:获取键对应的值
hget hash1 key3
地理信息(Geo)
geo 的数据结构存储经纬度信息,根据距离计算周围的人用的:
geoadd:添加地理坐标
用 loc 作为 key,分别添加 yunyun 和 mumu 的经纬度:
geoadd loc 13.361389 38.115556 "yunyun" 15.087269 37.502669 "mumu"
redis 实际使用 zset 存储的,把经纬度转化为了二维平面的坐标:
geodist:计算两个坐标点之间的距离
geodist loc yunyun mumu
georadius:搜索指定半径内的其他点
传入经纬度、半径和单位:
georadius loc 15 37 200 km
georadius loc 15 37 100 km
Redis的过期时间
Redis 的键可以通过 expire 命令设置过期时间,使用 ttl 命令查询剩余过期时间。比如我设置 yun 的 key 为 30 秒过期:
expire yun 30
转载自:https://juejin.cn/post/7362837521560207397