redis 作用和应用场景等总结篇

目录

一、什么是redis

二、应用场景

三、优点

四、redis持久化的几种方式

五、memecache和redis的区别

六、redis 常见的性能问题以及解决方案

七、redis 如何做内存优化

八、redis 如何实现分布式锁以及分布式锁的缺陷


一、什么是redis

   Redis 是一个基于内存的高性能非关系型数据库,存储格式为key-value,可以存储的数据类型有五种:String类型、List类型、Set类型(有序可重复)、Zset类型(无序不可重复)、Map类型;Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 

二、应用场景

1、排行榜

2、计数器应用

3、Pub/Sub构建实时消息系统

4、构建队列系统

5、缓存

等等,在这里不一一举例。

三、优点

1、速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) ;

2、支持丰富数据类型,支持string,list,set,sorted set,hash;

3、 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 ;

4、 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。

四、redis持久化的几种方式

1、快照(snapshots)

缺省情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。

2、AOF

快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,Redis就不是一个合适的选择。Append-only文件模式是另一种选择。你可以在配置文件中打开AOF模式。

3、虚拟内存方式

当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大;

当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value;

vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证。
 

五、memecache和redis的区别

1、存储方式:

memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;

redis有部份存在硬盘上,这样能保证数据的持久性。

2、数据支持类型:

redis在数据支持上要比memecache多的多;memecache仅支持简单字符串类型。

3、使用底层模型不同:

新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4、速度

readis速度要比memecache快很多。

六、redis 常见的性能问题以及解决方案

   1、Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,因此最好Master不要写内存快照。

   2、Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

   3、Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

   4、Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。

七、redis 如何做内存优化

1、Redis存储的所有数据都使用redisObject来封装,包括string、hash、list、set、zset;

2、尽可能的使用hash数据结构、减少key的数量;

3、共享对象池:Redis内部维护[0-9999]的整数对象池,对于0-9999的内部整数类型的元素、整数值对象都会直接引用整数对象池中的对象,因此尽量使用整数对象可节省内存;

注意:启用LRU相关的溢出策略时,无法使用共享对象池;对于ziplist编码的值对象,也无法使用共享对象池(成本过高)。

4、缩减键、值对象的长度:简化键名,使用高效的序列化工具来序列化值对象,还可使用压缩工具(Google Snappy)压缩序列化后的数据;

5、redisObject的字段。

八、redis 如何实现分布式锁以及分布式锁的缺陷

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值