当前位置: 首页 > news >正文

linux学习笔记(49)Redis详解(1)

Redis

1. 什么是 Redis?

Redis 是一个内存数据库,就像电脑的"超快速临时笔记本":

生活场景比喻:

传统数据库(MySQL):像图书馆 - 数据存在硬盘上,找书比较慢 - 数据永久保存,很安全 Redis:像你的便签本 - 数据存在内存中,查看超快 - 数据可能丢失(便签本丢了就没了) - 适合记临时、重要的东西

2. Redis 的核心特点

  • 🚀 超快:数据在内存中,读写速度极快
  • 🎯 键值存储:像字典一样,key → value
  • 🔄 持久化:可以把内存数据保存到硬盘
  • 📚 多种数据类型:不只是字符串,还有列表、集合等
  • 🎪 功能丰富:支持发布订阅、事务等

🔑 Redis 键值对基本操作

Redis 中的数据都是以键值对的形式存储的,下面是一些最常用的基础命令:
命令
语法示例
说明
SET
SET key value
设置一个键值对。
GET
GET key
通过键获取对应的值。
DEL
DEL key [key ...]
删除一个或多个键值对。
EXISTS
EXISTS key
判断一个键是否存在。
KEYS
KEYS pattern
按照模式(如
*
)查找所有匹配的键。
EXPIRE
EXPIRE key seconds
为键设置过期时间(秒)。
TTL
TTL key
查看键的剩余生存时间。
TYPE
TYPE key
返回键所存储值的数据类型。

🗃️ 数据库管理操作

Redis 默认有16个数据库(编号0-15),以下命令用于管理这些数据库:
命令
语法示例
说明
SELECT
SELECT index
切换到指定编号的数据库。
DBSIZE
DBSIZE
返回当前数据库的 key 的数量
FLUSHDB
FLUSHDB
清空当前数据库
中的所有键。
FLUSHALL
FLUSHALL
清空所有数据库
中的键,
请慎用

💻 实战示例

您可以在 Redis 客户端中输入以下命令来体验上述操作:
# 切换到2号数据库
127.0.0.1:6379> SELECT 2
OK# 设置一个键值对
127.0.0.1:6379[2]> SET username "Redis新手"
OK# 获取这个值
127.0.0.1:6379[2]> GET username
"Redis新手"# 查看当前数据库的key数量
127.0.0.1:6379[2]> DBSIZE
(integer) 1# 设置一个10秒后过期的键
127.0.0.1:6379[2]> SET temp_data "临时数据" EX 10
OK# 查看所有键(注意:KEYS * 在生产环境需谨慎使用)
127.0.0.1:6379[2]> KEYS *
1) "username"
2) "temp_data"

⚠️ 重要提醒

  • KEYS * 命令需谨慎:这个命令会遍历所有键,如果数据库很大,可能会导致 Redis 暂时阻塞,影响其他命令执行。在生产环境中,如果可以,请尽量避免使用。
  • FLUSHALL 命令非常危险:它会清除所有数据库里的数据,且不可恢复,使用时务必确认操作环境。
  • DBSIZE 命令是高效的:与 KEYS * 不同,DBSIZE 命令会直接返回一个内部计数,速度极快,可以放心使用。xx

3. Redis 的数据类型(最重要!)

3.1 String(字符串)

# 像变量赋值
SET username "张三"       # 存数据
GET username             # 取数据 → "张三"
INCR view_count          # 自增:view_count += 1
DECR stock               # 自减:stock -= 1

使用场景:缓存、计数器、分布式锁

🔢 字符串的数值操作

这些命令专门用于处理数字类型的字符串值:
命令
语法
说明
示例
INCR
INCR key
将键的值增加1
INCR views
 → views=1
DECR
DECR key
将键的值减少1
DECR stock
 → stock=99
INCRBY
INCRBY key increment
按指定数值增加
INCRBY score 5
 → score+5
DECRBY
DECRBY key decrement
按指定数值减少
DECRBY balance 100
 → balance-100
INCRBYFLOAT
INCRBYFLOAT key increment
按浮点数增加
INCRBYFLOAT price 0.5
 → price+0.5

📍 字符串的范围操作

这些命令用于处理字符串的子串:
命令
语法
说明
示例
GETRANGE
GETRANGE key start end
获取字符串的子串
GETRANGE msg 0 4
 → "Hello"
SETRANGE
SETRANGE key offset value
从指定位置覆盖字符串
SETRANGE name 3 "XX"
APPEND
APPEND key value
追加字符串
APPEND msg " World"
STRLEN
STRLEN key
获取字符串长度
STRLEN msg
 → 11

📊 命令特性总结

命令类型
特点
使用场景
INCR/DECR
原子操作,线程安全
计数器、ID生成、库存
INCRBY/DECRBY
指定步长增减
批量更新、积分系统
INCRBYFLOAT
支持浮点数
价格计算、科学计算
GETRANGE
按索引获取子串
摘要生成、字符串分析
SETRANGE
部分覆盖字符串
模板填充、内容修正
APPEND
字符串拼接
日志记录、消息构建

⚠️ 注意事项

INCR/DECR 只能用于整数

SET count "10"
INCR count  # ✓ 正确:11SET count "10.5" 
INCR count  # ✗ 错误:值不是整数

SETRANGE 会覆盖原有内容

SET text "Hello World"
SETRANGE text 6 "Redis"  # 结果:"Hello Redis"(不是"Hello Redis World")

GETRANGE 索引从0开始

SET text "Redis"
GETRANGE text 0 1  # "Re"
GETRANGE text 1 3  # "edi"

3.2 List(列表)

# 像排队,先进先出
LPUSH messages "hello"    # 左边插入
LPUSH messages "world"    # 列表:["world", "hello"]
RPOP messages             # 右边弹出 → "hello"# 或者像栈,后进先出  
RPUSH stack "item1"
RPUSH stack "item2"
RPOP stack                # 弹出 → "item2"

使用场景:消息队列、最新消息列表

3.3 Set(集合)

# 像数学的集合,元素不重复
SADD tags "java" "python" "redis"    # 添加元素
SMEMBERS tags                         # 查看所有 → java, python, redis
SADD tags "java"                      # 添加重复元素,会被忽略
SISMEMBER tags "java"                 # 检查是否存在 → 1(存在)# 集合运算
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"  
SINTER set1 set2                      # 交集 → b, c
SUNION set1 set2                      # 并集 → a, b, c, d

使用场景:标签、好友关系、抽奖

3.4 Hash(哈希)

# 像对象或字典
HSET user:1001 name "张三" age 25 city "北京"  # 设置字段
HGET user:1001 name                          # 获取字段 → "张三"
HGETALL user:1001                            # 获取所有 → name,张三,age,25...
HINCRBY user:1001 age 1                      # 年龄+1 → 26

使用场景:用户信息、商品信息、配置信息

3.5 Zset(有序集合)

# 带分数的集合,可以排序
ZADD ranking 95 "张三" 87 "李四" 92 "王五"    # 添加带分数的元素
ZRANGE ranking 0 -1                         # 按分数升序 → 李四,王五,张三  
ZREVRANGE ranking 0 -1                      # 按分数降序 → 张三,王五,李四
ZRANK ranking "张三"                         # 查看排名 → 2(从0开始)
ZSCORE ranking "张三"                        # 查看分数 → 95

使用场景:排行榜、带权重的队列

三种特殊类型的总结

类型
主要用途
特点
适用场景
Bitmaps
位级操作
极其节省空间,支持位运算
用户签到、在线状态、特征标记
HyperLogLog
基数估算
固定12KB内存,有误差
UV统计、搜索词去重计数
Geospatial
地理位置
支持距离计算、范围查询
附近的人、门店查找、物流配送

4. Redis 的实际使用

安装和启动:

# 安装Redis
sudo apt-get install redis-server# 启动Redis服务
redis-server# 连接Redis客户端
redis-cli# 测试连接
ping  # 应该返回 PONG

基本操作演示:

# 字符串操作
127.0.0.1:6379> SET website "baidu.com"
OK
127.0.0.1:6379> GET website
"baidu.com"# 列表操作  
127.0.0.1:6379> LPUSH recent_users "user1" "user2" "user3"
(integer) 3
127.0.0.1:6379> LRANGE recent_users 0 -1
1) "user3"
2) "user2" 
3) "user1"# 哈希操作
127.0.0.1:6379> HSET product:1001 name "手机" price 2999 stock 100
(integer) 3
127.0.0.1:6379> HGET product:1001 name
"手机"

Redis vs 传统数据库

特性
Redis
MySQL
存储位置
内存
硬盘
读写速度
极快(微秒级)
较慢(毫秒级)
数据容量
受内存限制
受硬盘限制
数据类型
丰富的数据结构
主要是表结构
适用场景
缓存、计数器、队列
持久化存储、复杂查询

 Redis 的重要特性

过期时间:

SET session:user123 "data" EX 3600    # 1小时后自动删除
TTL session:user123                   # 查看剩余时间

发布订阅:

# 终端1:订阅频道
SUBSCRIBE news# 终端2:发布消息  
PUBLISH news "今日头条!"

事务:

MULTI                 # 开始事务
SET key1 "value1"
SET key2 "value2" 
EXEC                  # 执行事务

学习建议

新手学习路径:

  1. 先学基本命令:SET/GET, LPUSH/LPOP, SADD/SMEMBERS 等
  2. 理解数据类型:知道每种数据类型的适用场景
  3. 学习持久化:了解 RDB 和 AOF 的区别
  4. 掌握实际应用:缓存、计数器、队列等场景

常用命令练习:

# 1. 字符串操作
SET name "Redis"
GET name# 2. 列表操作  
LPUSH numbers 1 2 3
LRANGE numbers 0 -1# 3. 集合操作
SADD fruits "apple" "banana"
SMEMBERS fruits# 4. 哈希操作
HSET user:1000 name "John" age 30
HGETALL user:1000

总结

Redis 就是
一个超快的内存数据库
键值对存储数据,支持多种数据结构
主要用来做缓存计数器消息队列
核心价值
  • 🚀 速度快:比传统数据库快100倍
  • 🎯 使用简单:像操作字典一样简单
  • 🔧 功能丰富:5种数据结构满足不同需求
  • 📊 适用场景多:缓存、排行榜、消息队列等
记住:Redis 不是要替代 MySQL,而是配合使用,把热点数据放 Redis 提升性能!
http://www.dtcms.com/a/515888.html

相关文章:

  • 扩展、Docker-compose-1
  • Label Smoothing
  • 深入理解 MySQL 锁机制:全局锁、表锁与行锁
  • 本科专业 网站开发wordpress子站点目录
  • ABP Framework 与 若依(RuoYi) 产品可用性全方位碰撞
  • SharpDevelop下载安装图解(附安装包,适合新手)
  • 深度学习-174-知识图谱技术之langchain与neo4j的结合应用
  • nlp security tk
  • PixBean - 小豆包API专属工具站已发布 v1.0.0
  • 【题解】P2501 [HAOI2006] 数字序列 [思维 + dp]
  • Xshell效率实战系列五:大文件传输封神技——断点续传+压缩传输双buff拉满
  • 【CTF】强网杯2025 Web题目writeup
  • 广东深圳网站建设wordpress局部内容
  • UCLAMP1211T.TCT TVS二极管瞬态电压抑制器Semtech升特 电源芯片芯片解析
  • GLM 智能助力・Trae 跨端个人任务清单
  • top命令的详解
  • 建行网站会员徐州市政工程招标信息
  • 开关电源的瞬态电流如何测试?
  • 性能测试 | 认识性能测试工具JMeter断言、关联、属性以及录制脚本的使用
  • 自编音乐结构理论
  • OpenAI发布AI浏览器Atlas:探索下一代网页交互新可能
  • DDD(二)对比 MVC 架构,DDD 的优劣势
  • 昆山网站建设 熊掌号怎么查名字有没有被注册商标
  • 网站页面好了怎么做后端利川市网站建设
  • [Agent可视化] [特殊字符]可观测体系 | 指标监控 | 分布式追踪 | eg慢请求诊断
  • C语言题目与练习解析:配套《柔性数组和动态内存易错点》
  • 在 IntelliJ IDEA 中启动多个不同端口的 Spring Boot 应用
  • 实战分享:一键自动化下载指定版本的Chrome及Chromedriver(附Python源码)
  • Jetson docker环境搭建
  • FVM (Flutter Version Manager)