Redis_常见问题

参考

https://github.com/AobingJava/JavaFamily

为什么使用Redis?

传统的关系型数据库已经不适用所有场景了,例如频繁变化和操作的短时热点数据,如果直接访问MySQL这类的关系型数据库,会极大地增添数据库负担,严重时可能引起系统崩溃,所以考虑引入缓存中间件Redis。

Redis与Memcached的区别,为什么选择Redis?

  • Redis支持的数据结构更丰富

  • Redis支持原生集群

  • Redis单核,MemCached多核,在存储小数据上Redis性能更高,大数据上略逊于MemCached

  • MemCached key 不能超过 250 个字节;

  • MemCached value 不能超过 1M 字节;

  • MemCached key 的最大失效时间是 30 天;

  • MemCached 只支持 K-V 结构,不提供持久化和主从同步功能。

Redis为什么快?

  • 完全基于内存,类似HashMap
  • 单线程,避免不必要的上下文切换和竞争条件
  • 多路IO复用模型,非阻塞IO
  • 数据结构简单
  • 构建了VM机制

什么是上下文切换

比如你看书的时候,突然有朋友说接他看一下,然后你借给他,等他还给你,你要再翻到你之前看到的页码,这就是一个切换过程。

Redis的线程模型是什么?

https://doocs.github.io/advanced-java/#/./docs/high-concurrency/redis-single-thread-model
Redis内部使用文件事件处理器File Event Handler,其包含四个部分:

  • 多个socket
  • IO多路复用程序
  • 文件事件分派器
  • 事件处理器
    • 连接应答处理器
    • 命令请求处理器
    • 命令回复处理器
      文件事件处理器是单线程的,所以Redis是单线程模型,采用IO多路复用机制通知监控多个socket,多个socket可能会并发产生不同操作,每个操作对应不同的文件事件,IO多路复用程序会将事件放入队列,事件分派器依次从队列中取事件,交给对应的事件处理器处理。
      在这里插入图片描述

单线程的Redis是否浪费了多核服务器的性能?

并不会。可以在一台服务器部署多个Redis实例。

Redis有哪些数据结构和应用场景

https://blog.csdn.net/Chill_Lyn/article/details/104430104
https://blog.csdn.net/Chill_Lyn/article/details/104484301

  • 基本数据结构
    • String
      • 缓存 setex key seconds value
      • 计数器 incr key incrby key increment
      • 共享用户session
    • Hash
      • 对象有很多属性 hset key field value
    • List
      • 消息队列 lpush key value1 rpop key
      • 分页展示 lrange key start stop
    • Set
      • 获取随机数据 srandmember key [count] spop key [count]
      • 交集、并集、差集 `sinter key1 [ke
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值