一.redis简介,优缺点

1.什么是Redis

一个由C语言编写,基于内存K,V的数据库,QPS官方数据压测可达数十万QPS,非常适合读多写少的场景.

2.为什么要用redis,可以帮我们解决什么问题

redis优点:

  • 1:性能高,单线程非常适合读多写少的场景,可以减轻数据库压力,数据库并不可以随意横向拓展,并且大多数场景,性能瓶颈都在我们数据库.
    (这里单线程指的是执行命令的客户端单线程,实际上redis内部还会有子进程去做持久化,删除key,同步集群数据等事情)
  • 2.集群分布式存储,可以横向拓展,可以做到高可用.
  • 3.数据结构类型丰富,String,List,Set,Sortrd Set,Hash
  • 4.支持数据持久化
  • 5.支持事务,但是一般不用,一般用lua脚本来代替事务功能.

redis缺点:

  • 1.成也内存,败也内存,不保证数据的可靠性,数据有可能在宕机情况会丢失少部分数据.不能保持数据库和缓存的一致性,如果需要保持一致性,需要付出一定性能代价(加锁串行)
  • 2.存储成本高,因为是内存
  • 3.以上缺点都不是缺点,仍然很香.

redis为什么性能高:

  • 1.单线程,避免了频繁上下文切换,正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿.
    上下文切换:线程切换的时候,需要保存当前线程的执行状态例如执行到哪一行代码,当前变量的值等,如果线程开得多,cpu是抢占式调度,有可能你这部分代码没执行完,cpu就和你说拜拜去做其他事情,我等下再来,所以要保存当前线程的状态
  • 2.基于内存操作,数据在内存中存储基本类似HashMap,时间复杂度是O(1).
  • 3.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器.
    即接收到消息和返回消息的时候是非阻塞的,我可以有100个客户端同时向redis发送请求,这个时候是非阻塞的,但是执行命令仍然是单线程,即使是redis6.0多线程特性,执行命令依然是单线程.
  • 4.redis对存储的数据结构进行了优化,使其在一定条件下,占用的内存更小,例如zset,在数据量或者数据长度没有达到配置的时候,value使用ziplist存储,达到条件的时候用zset数据结构存储,节省内存和带宽.
    IO多路复用

实际使用场景:

  • 1.缓存,读多写少的场景.
  • 2.分布式锁,我们java常用的lock和synchronize,都是jvm内存级别的锁,一旦分布式环境下,他就歇菜了,所以需要用分布式锁.
  • 3.支持订阅发布功能
  • 4.做计数,统计,原子加等操作很方便
  • 5.分布式Session

技术选型:
略,因为我只用过redis,后续补充.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值