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 -- 左弹出值 
未完,待更新 。。。
相关推荐
Dann Hiroaki21 分钟前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
KhalilRuan36 分钟前
Unity-MMORPG内容笔记-其三
笔记
互联网搬砖老肖37 分钟前
运维打铁: MongoDB 数据库集群搭建与管理
运维·数据库·mongodb
典学长编程1 小时前
数据库Oracle从入门到精通!第四天(并发、锁、视图)
数据库·oracle
kfepiza2 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
积跬步,慕至千里2 小时前
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
数据库·clickhouse
极限实验室2 小时前
搭建持久化的 INFINI Console 与 Easysearch 容器环境
数据库
白仑色3 小时前
Oracle PL/SQL 编程基础详解(从块结构到游标操作)
数据库·oracle·数据库开发·存储过程·plsql编程
程序猿小D4 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
I'm写代码5 小时前
el-tree树形结构笔记
javascript·vue.js·笔记