文章目录
- redis
-
- 简介
- [内存 和 磁盘的区别](#内存 和 磁盘的区别)
- [redis 与 mysql 的区别 与 适用时机](#redis 与 mysql 的区别 与 适用时机)
- [redis 不同数据结构适用场景](#redis 不同数据结构适用场景)
redis
简介
Redis是一个开源的内存数据库,它以键值对的形式存储数据,并且支持多种数据结构,包括字符串、列表、集合、哈希、有序集合等。Redis最显著的特点是其高性能和快速的读写访问速度,这主要得益于其将数据存储在内存中,并且使用单线程模型来处理请求。
内存 和 磁盘的区别
内存
- 用于临时存储
- 读写速度快,被cpu直接访问
- 内存容量小,价格贵
磁盘
- 用于永久储存
- 读写速度较慢
- 磁盘容量大,价格低
总结
内存和磁盘在读写性能和查询性能方面有着明显的差异。内存具有极高的读写速度和查询性能,适合处理实时性要求高的数据操作;而磁盘虽然读写速度较慢,但容量较大,适合长期存储和处理大量数据。
redis 与 mysql 的区别 与 适用时机
redis
- 快速的内存访问
- 支付丰富的数据结构
- 受限于内存容量
- 持久化开销大
mysql
- 持久化存储
- 具有强大的查询功能
- 性能较低
什么时候使用 redis
- 需要高性能的读写操作:Redis将数据存放在内存中,所以读写非常快。
- 对数据结构有特殊需求:Redis支持多种数据结构,适合需要复杂数据结构的场景。
- 需要实现实时通信或消息传递:Redis支持发布/订阅模式,可以实现实时通信和消息传递,适合需要实时消息处理的场景。
使用redis就是去缓解数据库的访问压力的,访问和操作的快,那么一定时间处理的就越多,就可以缓解数据库压力。
那么什么时候数据库压力大呢?
- 数据量大
- 查询频繁、高并发的访问
什么时候使用 mysql
- 需要复杂的查询和数据处理
- 需要持久化存储大规模数据
- 需要强大的事务支持
总结
选择使用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 -- 左弹出值
