概念

首先看下官方的介绍:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker.

Redis 是一种开源的内存数据结构存储,被用来作为数据库缓存以及消息队列

数据结构

  1. String
  2. List:  字符串集合,基于链表实现
  3. Set:唯一、无序的字符串集合
  4. SortedSet:和 Set 类似,但是每个 字符串会关联一个浮点的分数,用来获取 top10 类似的数据
  5. Hash:  hashMap, key-value 键值对,kv都是字符串类型
  6. bit arrays: 可用来处理类似二进制为的字符串,比如 计数 1,重置为 0 等。
  7. HyperLogLogs 
  8. Streams:尽可以 追加的类似于 map 的数据机构,日志类型数据的抽象。

    前5种,是必须要掌握的。

基本命令

1. String 相关

# 查看所有的 key
keys *
# 获取 key 的值
get key
# 设置 key 的值
set key value
# 设置 key 的过期时间
expire key 20
# 查看 key 剩余时间
ttl key
# 
flushall
# 删除 key
del key

2. List 相关

lpush / rpush
lrange start end
lrange 0 -1   -1: 最后一个
lpop     
rpop

3. Set 基本命令

sadd key value
smembers key

4. SortedSet 基本命令

zadd key 分数  value
zadd ss  70 zhangsan  80 lisi
zrange start end

5. Hash 基本命令

hset key filed value
hget key filed
hgetall key 
hdel key filed

持久化

为了实现高性能 Redis 使用内存数据集操作,但考虑到数据的安全,Redis 提供了持久化操作。支持两种类型的持久化,分别是 AOF 和 RDB。

下面分别介绍两种持久化方式:

1. RDB

   快照方式持久化,也是redis默认方式,只产生一个 dump.rdb文件,定时刷盘,性能较好,但是会面临数据丢失风险! 

具体工作方式:

1. fork 子进程

2. 将内存数据集写到一个临时文件

3. 写完替换旧的文件 (copy-on-write)

配置方式:

# 自动配置:60秒内至少有1000个key发生了变化,才会触发一次快照
save 60 1000 
# 手动方式
save/bgsave

2. AOF

    Append-Only-File, 以文件日志的方式记录所有的变更操作(增删改), 专门的持久化线程来读取日志进行持久化。

具体工作方式:

  1. fork 一个子进程 child
  2. child写入一个新的临时的aof文件
  3. parent在内存里记录写操作日志,同时也往老的文件写(保证如果child失败了,数据是安全的)
  4. child 合并写完后,通知parent将内存记录追加到child生成的文件中
  5. 老文件替换新文件(copy-on-write)

配置方式:

# 打开方式
appendonly yes
# 日志记录频率
# 性能最差,最安全,保证数据不丢
appendfsync always
# 可能丢失一秒的数据 (推荐)
appendfsync everyse
# 最快也最不安全,由操作系统来刷盘,频率在30-40秒
appendfsync no

具体选择哪个,根据你的需求:

  1. 如果你比较关注你的数据,但是可以容忍几分钟的数据丢失,可以只用RDB。
  2. 不推荐只用 AOF 的方式,因为 RDB 非常适合数据的定时备份和快速恢复,所以如果对数据安全要求比较高会使用 RDB + AOF的方式。

笔者之前公司的线上都是使用 RDB + AOF 的方式。

本文结束,如果大家反馈比较好的话,后续会更新 Redis 高级话题,比如集群、哨兵、监控等相关内容。