认识 Redis

什么是 Redis?

Redis(Remote Dictionary Server,远程字典服务)是一种通过 C 语言编写,基于内存的 key-value 数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存、消息队列、分布式锁等场景

Redis 提供了多种数据类型来支持不同的业务场景,并且对数据类型的操作都是原子性的,因为执行命令由单线程负责,不存在并发竞争的问题

除此之外,Redis 还支持事务、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制

Redis 和 Memcached 有什么区别?

Memcached 也是基于内存的数据库

共同点:

  • 都是基于内存的数据库,性能都非常高,一般都用来当做缓存使用
  • 都有过期策略

区别:

  • 支持的数据类型:
    • Redis 支持的数据类型更丰富
    • Memcached 只支持 key-value 数据类型
  • 数据持久化:
    • Redis 支持数据持久化,可以将内存中的数据保持在磁盘中,重启时可以再次加载进行使用
    • Memcached 没有持久化功能,数据全部存在内存之中,重启或者挂掉后,数据就没了
  • 集群:
    • Redis 原生支持集群模式
    • Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据
  • 其他:
    • Redis 支持发布订阅模型、Lua 脚本、事务等功能
    • Memcached 不支持

Redis 版本命名规则

  • 版本号第二位是奇数:非稳定版本
  • 版本号第二位是偶数:稳定版本

Redis bin

  • redis-serverRedis 服务器
  • redis-cliRedis 客户端
  • redis-benchmark:Redis 性能测试
  • redis-check-aof:修复有问题的 AOF 文件
  • redis-check-dump:修复有问题的 dump.rdb 文件
  • redis-sentinel:Redis 集群

启动服务:

redis-server <配置文>

使用客户端连接服务:

# 使用客户端连接服务
redis-cli [-p <端口>] [-a <>]
 
# 授权密码
auth <>
# 配置文件的 requirepass 配置项设置密码
# 如果没有设置密码,则不需要授权

Redis 端口号默认为:6379

关闭服务:

redis-cli [-p <端口>] [-a <>] shutdown

常见命令

命令不区分大小写,而 key 是区分大小写的

  • exists <key>:判断某个 key 是否存在
  • type <key>:查看 key 对应值的数据类型
  • del <key>:删除指定 key 的数据
  • unlink <key>:非阻塞删除,仅在 keyspace 元数据中删除,真正的删除在后续异步中操作
  • rename <key> <newKey>:修改 key 的键名
  • move <key> <dbIndex>:将当前数据库的 key 移动到指定数据库中
  • select <dbIndex>:切换数据库
    • Redis 默认有 0~15,共 16 个数据库(可通过配置文件修改)
    • 默认进入 0 号数据库
  • dbsize:查看当前数据库 key 的数量
  • keys <pattern>:查询所有符合给定模式的 key
    • 如:keys * 表示查询当前库所有的 key
  • flushdb:清空当前库
  • flushall:清空所有库