Redis:命令行基础语法与实战

目录


一、连接Redis服务器

在开始操作Redis之前,首先需要建立与服务器的连接。Redis官方提供了redis-cli命令行工具,这是与Redis交互最直接的方式。

基础连接命令

bash 复制代码
ps -ef | grep redis 
redis-cli -h <host> -p <port> -a <password>

参数详解

  • ps -ef | grep redis:查看Redis服务器开启情况
  • -h:指定Redis服务器的主机名或IP地址。
  • -p:指定Redis服务器的端口号,默认为6379。
  • -a:指定连接密码(如果服务器设置了requirepass)。

常用连接示例

  • 连接本地默认Redis服务
bash 复制代码
redis-cli
  • 连接远程服务器
bash 复制代码
redis-cli -h 192.168.1.100 -p 6379 -a mypassword
  • 连接并指定数据库
bash 复制代码
redis-cli -n 1  # 连接到数据库1

连接验证

连接成功后,可以使用PING命令测试连接状态:

bash 复制代码
127.0.0.1:6379> PING
PONG

二、核心数据类型操作

Redis支持五种核心数据结构,每种结构都有其特定的操作命令。

可以使用help [operation]进行查找

1.字符串(String)操作

字符串是Redis最基本的数据类型,可以存储文本、数字或二进制数据。

常用命令

bash 复制代码
# 设置键值对
SET username "zhangsan"

# 获取值
GET username

# 设置带过期时间的值(秒)
SET session_token "abc123" EX 3600

# 这里代表abc123只存在一个小时,涉及到TTL时间;
# 默认set后TTL=-1,代表永久存在;TTL随时间减少,减少为0时修改为TTL=-2,代表销毁
# 可用TTL [key_name]查看剩余时间

# 原子递增
SET counter 0
INCR counter  # 返回1
INCR counter  # 返回2

# 批量操作
MSET key1 "value1" key2 "value2"
MGET key1 key2

2.哈希(Hash)操作

哈希适合存储对象,将多个字段-值对存储在一个键下。

常用命令

bash 复制代码
# 设置哈希字段
HSET user:1001 name "Alice" age 30

# 获取单个字段
HGET user:1001 name

# 获取所有字段
HGETALL user:1001

# 字段递增
HINCRBY user:1001 age 1

# 检查字段是否存在
HEXISTS user:1001 name

3.列表(List)操作

列表是有序的字符串集合,支持从两端进行插入和弹出操作。

常用命令

bash 复制代码
# 左侧插入
LPUSH mylist "value1" "value2"

# 右侧插入
RPUSH mylist "value3"

# 获取列表范围
LRANGE mylist 0 -1  # 获取所有元素

# 左侧弹出
LPOP mylist

# 右侧弹出
RPOP mylist

# 获取列表长度
LLEN mylist

4.集合(Set)操作

集合是无序且不重复的字符串集合。

常用命令

bash 复制代码
# 添加元素
SADD myset "member1" "member2"

# 获取所有元素
SMEMBERS myset

# 检查元素是否存在
SISMEMBER myset "member1"

# 集合运算
SADD set1 "a" "b"
SADD set2 "b" "c"
SINTER set1 set2  # 交集: "b"
SUNION set1 set2  # 并集: "a", "b", "c"

5.有序集合(ZSet)操作

有序集合为每个成员关联一个分数,按分数排序。

常用命令

bash 复制代码
# 添加成员及分数
ZADD leaderboard 100 "player1" 200 "player2"

# 获取排名范围
ZRANGE leaderboard 0 -1 WITHSCORES

# 按分数范围查询
ZRANGEBYSCORE leaderboard 50 150

# 增加分数
ZINCRBY leaderboard 50 "player1"

# 获取成员排名
ZREVRANK leaderboard "player1"

三、键管理命令

键管理是Redis操作的基础,涉及键的查询、删除、过期等操作。

常用键管理命令

bash 复制代码
# 检查键是否存在
EXISTS username

# 删除键
DEL username

# 获取键类型
TYPE username

# 设置过期时间(秒)
EXPIRE session_token 3600

# 获取剩余生存时间
TTL session_token

# 移除过期时间
PERSIST session_token

# 重命名键
RENAME oldkey newkey

# 扫描键(非阻塞)
SCAN 0 MATCH user:* COUNT 10

# 查看当前数据库键数量
DBSIZE

# 查看所有键(生产环境慎用)
KEYS *

四、事务/脚本

Redis支持事务和Lua脚本,用于实现原子性操作。

事务操作

bash 复制代码
# 开启事务
MULTI

# 命令入队
SET key1 "value1"
SET key2 "value2"

# 执行事务
EXEC

# 取消事务
DISCARD

# 监视键(乐观锁)
WATCH key1
MULTI
SET key1 "new_value"
EXEC

Lua脚本

bash 复制代码
# 直接执行脚本
EVAL "return redis.call('GET', KEYS[1])" 1 mykey

# 从文件执行
redis-cli --eval script.lua mykey , arg1

# 加载脚本并返回SHA
SCRIPT LOAD "return 1"

# 通过SHA执行
EVALSHA <sha1> 1 mykey

五、服务器管理与监控

Redis提供了丰富的命令用于服务器管理和性能监控。

服务器信息

bash 复制代码
# 查看服务器状态
INFO

# 查看特定部分信息
INFO memory
INFO clients

# 获取配置参数
CONFIG GET maxmemory
CONFIG GET databases

# 查看客户端连接
CLIENT LIST

# 杀死指定客户端
CLIENT KILL 127.0.0.1:12345

性能监控

bash 复制代码
# 实时监控命令
MONITOR

# 查看慢查询日志
SLOWLOG GET 10

# 统计信息
redis-cli --stat

# 延迟测试
redis-cli --latency -h 127.0.0.1

# 查找大键
redis-cli --bigkeys

持久化操作

bash 复制代码
# 同步保存RDB
SAVE

# 异步保存RDB
BGSAVE

# 重写AOF
BGREWRITEAOF

# 查看最后保存时间
LASTSAVE

六、高级功能

管道(Pipeline)

管道可以减少网络往返时间,提高批量操作效率。

bash 复制代码
# 使用管道批量导入
cat data.txt | redis-cli --pipe

发布订阅

bash 复制代码
# 订阅频道
SUBSCRIBE channel1

# 发布消息
PUBLISH channel1 "Hello World"

集群管理

bash 复制代码
# 查看集群信息
CLUSTER INFO
CLUSTER NODES

# 进入集群模式
redis-cli -c -h 127.0.0.1 -p 7000

七、实践与注意事项

键命名规范

  • 使用冒号分隔的命名空间:user:1001:profile
  • 避免特殊字符,使用小写字母和下划线
  • 控制键长度,建议不超过44字节

性能优化建议

  • 避免使用KEYS *命令,改用SCAN
  • 谨慎使用MONITOR,生产环境会影响性能
  • 合理设置过期时间,避免内存泄漏
  • 使用批量操作代替多次单独操作

安全配置

  • 启用密码认证:requirepass yourpassword
  • 限制网络访问:bind 127.0.0.1
  • 禁用危险命令:rename-command FLUSHALL ""
相关推荐
2301_816660212 小时前
golang如何实现消息批量消费_golang消息批量消费实现策略
jvm·数据库·python
qq_189807032 小时前
SQL视图性能低怎么办_将普通视图转换为带索引的物化视图
jvm·数据库·python
yejqvow122 小时前
如何在 Supabase 中安全实现用户“鼓掌”计数(防刷、防重放、防越权)
jvm·数据库·python
m0_678485452 小时前
SQL利用窗口函数实现轻量级报表设计_实战技巧
jvm·数据库·python
m0_747854522 小时前
CSS实现卡片式布局_浮动元素与clearfix的应用
jvm·数据库·python
2401_835956812 小时前
如何处理SQL查询中的逻辑重叠:AND OR嵌套优先级
jvm·数据库·python
2301_796588502 小时前
Redis怎样优化大量Lua并发调用带来的CPU压力
jvm·数据库·python
2301_796588502 小时前
如何阻止 HTML 页面在 JavaScript 脚本执行完成前渲染
jvm·数据库·python
2301_773553622 小时前
mysql执行SQL查询时结果不一致_检查事务隔离级别设置与幻读
jvm·数据库·python