Redis笔记

文章目录

  • redis
    • 简介
    • [内存 和 磁盘的区别](#内存 和 磁盘的区别)
    • [redis 与 mysql 的区别 与 适用时机](#redis 与 mysql 的区别 与 适用时机)
      • redis
      • mysql
      • [什么时候使用 redis](#什么时候使用 redis)
      • [什么时候使用 mysql](#什么时候使用 mysql)
      • 总结
    • [redis 不同数据结构适用场景](#redis 不同数据结构适用场景)
      • [字符串 String](#字符串 String)
      • [列表 List](#列表 List)
      • [集合 Set](#集合 Set)
      • [哈希 Hash](#哈希 Hash)
      • [有序集合 Sorted Set](#有序集合 Sorted Set)
      • 基本使用方法

redis

简介

Redis是一个开源的内存数据库,它以键值对的形式存储数据,并且支持多种数据结构,包括字符串、列表、集合、哈希、有序集合等。Redis最显著的特点是其高性能和快速的读写访问速度,这主要得益于其将数据存储在内存中,并且使用单线程模型来处理请求。

内存 和 磁盘的区别

内存

  • 用于临时存储
  • 读写速度快,被cpu直接访问
  • 内存容量小,价格贵

磁盘

  • 用于永久储存
  • 读写速度较慢
  • 磁盘容量大,价格低

总结

内存和磁盘在读写性能和查询性能方面有着明显的差异。内存具有极高的读写速度和查询性能,适合处理实时性要求高的数据操作;而磁盘虽然读写速度较慢,但容量较大,适合长期存储和处理大量数据。

redis 与 mysql 的区别 与 适用时机

redis

  • 快速的内存访问
  • 支付丰富的数据结构
  • 受限于内存容量
  • 持久化开销大

mysql

  • 持久化存储
  • 具有强大的查询功能
  • 性能较低

什么时候使用 redis

  1. 需要高性能的读写操作:Redis将数据存放在内存中,所以读写非常快。
  2. 对数据结构有特殊需求:Redis支持多种数据结构,适合需要复杂数据结构的场景。
  3. 需要实现实时通信或消息传递:Redis支持发布/订阅模式,可以实现实时通信和消息传递,适合需要实时消息处理的场景。

使用redis就是去缓解数据库的访问压力的,访问和操作的快,那么一定时间处理的就越多,就可以缓解数据库压力。

那么什么时候数据库压力大呢?

  1. 数据量大
  2. 查询频繁、高并发的访问

什么时候使用 mysql

  1. 需要复杂的查询和数据处理
  2. 需要持久化存储大规模数据
  3. 需要强大的事务支持

总结

选择使用Redis还是MySQL取决于应用需求和场景。如果需要快速的读写访问,并且数据量相对较小,可以使用Redis;如果需要处理复杂的查询和大规模数据存储,可以使用MySQL。有时候也可以将两者结合使用,根据实际需求进行数据存储和处理。

redis 不同数据结构适用场景

字符串 String

  • 缓存
  • 计算器

列表 List

  • 消息队列
  • 最新动态
  • 日志记录

集合 Set

  • 标签系统
  • 好友关系

哈希 Hash

  • 用户信息
  • 对象

有序集合 Sorted Set

  • 排行榜
  • 地理位置服务

基本使用方法

键值对
sql 复制代码
set name lpy   --存放字符串键值对
mset name lpy age 18 --批量存放键值对
setnx name lpy  --如果不存在key为name,那么就设置value(分布式锁的原理)
get name   -- 获取key
mget name age  --批量获取key
del key -- 删除key
expire key 60 --设置过期时间,单位为秒
incr key -- 将key中存储的数字加1
decr key -- 将key中存储的数字减1
incrby key 2  --将key中存储的值都加上2
decrby key 2 --将key中存储的值都减去2
Hash

相当于键值对中的value变成了hash而已,个人理解。

所以其实和java对象很像,可以存储java对象。

比如:

sql 复制代码
hset sdt1 name lpy -- 设置值
hget sdt1 name -- 获取值
hmset sdt2 name hy age 18 -- 批量设置
hmget sdt2 name age -- 批量获取
hgetall sdt2 -- 获取全部键值
hkeys sdt2 -- 获取hash所有key
hvals sdt2 -- 获取hash所有value

演示一下就明白了。

List

和其他语言中的deque用法一致,不过这里是用左和右表示而不是front和back。

sql 复制代码
rpush myList val1 -- 右侧推入值
lpush myList val2 -- 左侧推入值
rpop myList -- 右弹出值
lpop myList -- 左弹出值 
未完,待更新 。。。
相关推荐
CCIE-Yasuo32 分钟前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶37 分钟前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构
涛思数据(TDengine)42 分钟前
从工业本体到 AI 原生:TDengine 出席 2026 QCon 分享工业数据基础设施路径
大数据·数据库·人工智能·tdengine·工业
Jesse_EC1 小时前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
工控丫丫1 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P19 数据分析 Data Analysis
人工智能·笔记·数据分析
这个DBA有点耶2 小时前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
旖旎夜光2 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
ACP广源盛139246256733 小时前
选型笔记:Type‑C 扩展坞方案评估|DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP
笔记·硬件架构·硬件工程·视频·国产芯片
Mikko73 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端