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 -- 左弹出值 
未完,待更新 。。。
相关推荐
xiaolin03339 分钟前
【复习】Redis
数据库·redis·缓存
tianyunlinger20 分钟前
BAG: Body-Aligned 3D Wearable Asset Generation
人工智能·笔记·3d
林林总肿28 分钟前
后端mySQL很容易犯的bug,bug记录解决
数据库·mysql·bug
m0_748254091 小时前
Spring Boot 中使用 @Transactional 注解配置事务管理
数据库·spring boot·sql
宋发元2 小时前
数据库的MVCC如何理解?
数据库·oracle
圣心2 小时前
Ollama Linux 部署指南
linux·数据库·mysql
有冠希没关系2 小时前
QT 读取sqlite3数据库中文乱码
数据库·qt·sqlite
阿志iiii3 小时前
【Java毕业设计】商城购物系统(附源码+数据库脚本)
java·数据库·课程设计
南宫文凯3 小时前
hbase集群部署
大数据·数据库·hbase
shepherd枸杞泡茶3 小时前
第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database
数据库·c#·asp.net·.net·.netcore