Redis常见性能问题和解决方案

什么样的数据适合存储在非关系型数据库中的呢?

    1、关系不是很密切的的数据,比如用户信息,班级信息,评论数量等等。
    2、量比较大的数据,如访问记录等
    3、访问比较频繁的数据,如用户信息,访问数量,最新微博等

Redis常见性能问题和解决方案:

Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
尽量避免在压力很大的主库上增加从库

Redis的并发竞争问题如何解决?

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:
 1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
 
2.服务器角度,利用setnx实现锁。
 注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。

Redis持久化数据和缓存怎么做扩容?

扩容的话可以通过redis集群实现,之前做项目的时候用过自己搭的redis集群

Redis与消息队列

不要使用redis去做消息队列,这不是redis的设计目标。但实在太多人使用redis去做去消息队列,redis的作者看不下去,另外基于redis的核心代码,另外实现了一个消息队列disque
我在做网站过程接触比较多的还是使用redis做缓存,比如秒杀系统,首页缓存等等。

Redis实现限流功能的优点:

可以应用于分布式或者集群下
redis并发量大

为啥redis单线程模型也能效率这么高?

1)纯内存操作
2)核心是基于非阻塞的IO多路复用机制
3)单线程反而避免了多线程的频繁上下文切换问题

redis都有哪些数据类型?分别在哪些场景下使用比较合适呢?

string 简单的 kv缓存
hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段
list 粉丝,关注,收藏,类似微博分页,分页查询
set 查看共同好友,
sorted set 排行榜

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值