Redis简介以及linux下常用下令

[复制链接]
发表于 2026-10-3 15:41:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

Redis 是什么:Linux 下常用命令与键操作全览

Redis 是运维和后端都绕不开的组件。它快在哪、适合干什么、装完要敲哪些命令、键怎么查怎么改——这篇按"是什么 → 干什么 → 怎么装 → 常用命令"的顺序过一遍。

一、Redis 简介

Remote Dictionary Server(Redis)是一个高性能的 key-value 数据库(存储系统),由 Salvatore Sanfilippo 开发,用 ANSI C 编写,遵循 BSD 协议,支持网络、可基于内存也可持久化,提供多种语言的 API。它通常被称作"数据结构服务器",因为值可以是字符串(String)、哈希(Map)、列表(List)、集合(Set)、有序集合等类型。

换句话说,Redis 是一种运行速率很快、并发性能很强,并且跑在内存上的 NoSQL 数据库。

二、为什么用 NoSQL

NoSQL 和传统关系库相比最大的优势:不用事先为存储的数据创建字段,随时能存自定义格式的数据格式。关系库加字段在数据量大的表里是噩梦,NoSQL 一行命令的事。

三、Redis 的优势

  • 性能极高:读约 11 万次/秒,写约 8 万次/秒。
  • 数据类型丰富:支持二进制安全的 String、List、Hash、Set 及有序集合。
  • 原子性:所有操作都是原子性的,也支持对几个操作合并后的原子执行。
  • 特性丰富:支持发布/订阅、key 过期通知等。

四、使用场景

  • 缓存:热点数据(常被查询但不常改删)。
  • 分布式锁:多线程环境下对共享资源访问的互斥。
  • token 存储、短信验证码存储。
  • 全局唯一 ID。
  • 排行榜:靠有序集合轻松搞定。
  • 计算器 / 限速器:利用原子自增统计点赞数、访问数;限速器如限定某个用户对某个 API 的访问频率,抢购场景防疯狂点击最典型。
  • 好友关系:用集合的交集、并集、差集实现共同好友、共同爱好。
  • 简单消息队列:除自带发布订阅外,用 List 做个队列做异步解耦,到货通知、邮件发送都合适。
  • Session 共享:session 存 Redis,用户落在哪台机器都能取到。

五、和其他存储怎么选

5.1 Redis vs Memcached

  • 都是内存数据库,memcached 还能缓存图片、视频等其他东西。
  • memcached 数据结构单一,Redis 更丰富。
  • 虚拟内存:Redis 物理内存用完,可以把久未使用的 value 换到磁盘。
  • 存储安全:memcached 挂掉数据全没(不持久化),Redis 可定期保存到磁盘。

5.2 Redis vs MongoDB

两者不是竞争关系,更多是协作共存。MongoDB 本质还是硬盘数据库,复杂查询消耗大量资源、处理复杂逻辑不可避免多次查询,此时靠 Redis 或 memcached 这类内存库做缓存加速层。

六、Linux 下安装与启动

6.1 配置后台运行

把 Redis 解压到 /home/softwares/redis-7.2.4,编辑配置文件:

vim /home/softwares/redis-7.2.4/redis.conf

改为后台运行:

daemonize yes

6.2 启动

cd /usr/local/bin
redis-server /home/softwares/redis-7.2.4/redis.conf

也可以把 conf 拷到 /usr/local/bin 改名,比如 redis7.conf,然后 redis-server /usr/local/bin/redis7.conf。

6.3 关闭

redis-cli shutdown            # 单实例
redis-cli -p 6379 shutdown    # 指定端口实例

Redis 默认配置 16 个数据库。

七、连接与基础操作

# 进入命令行终端
/usr/local/bin/redis-cli

# 认证
127.0.0.1:6379> auth 123456
OK

# 探活
127.0.0.1:6379> ping
PONG

读写数据:

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"

性能测试:

redis-benchmark -a 123456

顺带一问:为什么默认端口是 6379?因为这是手机按键上 MERZ 对应的号码,而 MERZ 取自意大利歌女 Alessia Merz 的名字。

八、键(key)操作

8.1 模糊查询 keys

keys 有三个通配符:*、?、[]。

# 查询所有键
keys *

# k 开头,后面任意字符
keys k*

# 以 h 结尾,前面任意字符
keys *h

# 双 * 模式,包含 K 的键
keys *d*

# k 开头且只匹配一个字符
keys k?

# 长度为 3 且以 s 开头
keys s??

# 第二个字符是 d 或 f
keys s[df]k

注意:keys 会遍历全库,线上数据量大的时候会阻塞服务,生产环境优先用 scan。

8.2 键操作

exists k2        # 判断 key 是否存在,1 存在 0 不存在
move k2 4        # 移动键到指定库,1 表示成功
ttl k1           # 查看还有多久过期,-1 永不过期 -2 已过期
expire k1 60     # 设置过期时间,单位是秒
type k1          # 查看键的数据类型

示例输出:

127.0.0.1:6379> type k1
string
127.0.0.1:6379> expire k1 60
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 55

8.3 scan 渐进式遍历

SCAN cursor [MATCH pattern] [COUNT count]

scan 三个参数:第一个是 cursor 整数值(hash 桶索引),第二个是 key 的正则模式,第三个是一次遍历的 key 数量(参考值,底层实际遍历数量不确定)。第一次遍历 cursor 填 0,把返回结果的第一个整数作为下次 cursor,一直遍到返回的 cursor 为 0 结束。

注意 scan 并非完美:遍历过程中如果有键增删改,可能漏掉新键、也可能重复返回,它不保证完整遍历所有键——开发时要把这个特性考虑进去。

8.4 清库

flushdb   # 清空当前数据库
flushall  # 清空所有数据库

九、进程与端口检查

netstat -lntp | grep 6379   # 检查端口是否在监听
ps -ef | grep redis         # 检查后台进程

十、常见坑

  • 线上别用 keys:单线程模型下会阻塞整个实例,改用 scan。
  • 内存打满:设 maxmemory 并配好淘汰策略(如 allkeys-lru 或 volatile-lru)。
  • 改配置后没重启:Redis 部分参数必须重启才生效(如 maxmemory),rename-command CONFIG 可防止线上误改。
  • 持久化没开:只靠内存,重启数据全丢,按需求开 RDB 或 AOF。
  • flushall 误操作:生产建议用 rename-command 把危险命令改掉或禁用。

小结

Redis 是内存 NoSQL,跑得快、类型多、操作原子,典型场景是缓存、分布式锁、排行榜、计数器限速、 Session 共享。Linux 下的日常动作就那几板斧:redis-server 配置文件 后台启动,redis-cli 进去 ping 探活、set/get 读写、keys 或 scan 找键、expire/ttl 管过期、flushdb 清库。记住线上用 scan 别用 keys,内存和持久化要提前配。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表