Redis:一款高性能的 NoSQL 系列的非关系型数据库。
Redis 和我们熟悉的类似的 MySQL 数据库不太一样,或者说主要体现在这里几个方面:
数据存储方式 | 数据关联关系 | 数据存储位置 | |
---|---|---|---|
MySQL | 存在表中,表格的一行代表一条数据 | 数据之间有关联关系,比如说“外键” | 数据存储在硬盘上 |
Redis | 存储的是一个个 key-value 键值对 | 数据之前没有关联关系 | 数据存储在内存中 |
我们使用 docker 来简单体验下 redis redis-docker
docker run --name some-redis -p 6379:6379 -d redis
# 下面这个命令是官方的例子,我目前不是很熟悉 docker 尝试了几种 network 的值,没跑起来,
# 所以换一种方式,目的是要使用 redis-cli
# docker run -it --network some-network --rm redis redis-cli -h some-redis
docker exec -it some-redis /bin/bash
redis-cli
set username "zhangsan"
get username
# "zhangsan"
即我们进入到 some-redis
这个容器中,使用 redis-cli
,体验了下存取 username
这个 key。
数据结构
key 都是字符串,我们主要说 value 的数据结构:
- string
set <key> <value>
get <key>
del <key>
- hash 类似 map(value 只能是字符串)
hset <key> <field> <value>
hget <key> <field>
hdel <key> <field>
hgetall <key>
- list 类似 linkedList (value 只能是字符串)
lpush <key> <value>
将元素加入列表左边rpush <key> <value>
将元素加入列表右边lrange <key> <start> <end>
范围获取(0 和 -1 的组合可以达到获取所有元素的效果)lpop <key>
从列表左边弹出一个元素
- set (value 只能是字符串)
sadd <key> <value>
smembers <key>
获取所有元素srem <key> <value>
- sortedSet(value 只能是字符串),由于它支持排序,所以有一个 score 的概念,score 是 double 类型的,通过 score 从小到大实现排序。
zadd <key> <score> <value>
zrange <key> <start> <end>
范围获取(0 和 -1 的组合可以达到获取所有元素的效果)zrem <key> <value>
通用命令
keys *
,列出所有 key,* 是正则表达式type <key>
输出某个 key 的类型del <key>
删除某个键值对
持久化
之前有提到 Redis 是把数据放在内存中的,那就意味着,运行 Redis 的电脑重启后,数据会丢失,所以我们需要把数据持久化保存到硬盘的方案。
RDB
默认方式,不需要进行配置,在一定的间隔时间内,检测 key 的变化情况,然后持久化数据。
具体的配置参数是在 Redis 的配置文件中进行配置的。
AOF
日志记录的方式,可以记录每一条命令操作。可以每一次命令操作后,持久化数据。
同样是在配置文件中,有一个 appendonly on
的配置项,改为 yes 即可。以及 appendfsync
配置项。