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 -- 左弹出值 
未完,待更新 。。。
相关推荐
Bert.Cai13 分钟前
MySQL LPAD()函数详解
数据库·mysql
JH30731 小时前
RedLock-红锁
java·redis
一嘴一个橘子1 小时前
redis 启动
redis
OnlyEasyCode1 小时前
Navicat 任务自动备份指定数据库
数据库
The Chosen One9851 小时前
计算机知识点的理解开悟后的分享(一)
笔记
if else2 小时前
Redis 哨兵集群部署方案
数据库·redis
yejqvow122 小时前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
了不起的云计算V2 小时前
从DeepSeek V4适配看国产算力的三个拐点
数据库·人工智能
rannn_1112 小时前
【Redis|原理篇2】Redis网络模型、通信协议、内存回收
java·网络·redis·后端·缓存
qq_189807032 小时前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python