Redis
深入理解Redis
程铭程铭你快成名
这个作者很懒,什么都没留下…
展开
-
Redis总结
最近针对Redis的基本数据结构、持久化机制、事务、主从复制和分布式锁等知识点做了系统的学习和整理,现对本次学习Redis的过程做一次思考和总结。为什么要使用nosql(not only sql)这个问题我们站在互联网技术中常提到的"高并发"和"高可用"关键词来思考这个问题,我是这样子理解的:传统的关系型数据库,比如单机的MySQL的QTS只有2000~3000左右,在一些大并发的场景下,比如618活动、双11活动等场景下,数据库根本就扛不住这么大的并发量,轻而易举的就将数据库打挂了,从而导致了服务原创 2020-07-02 15:41:08 · 10274 阅读 · 2 评论 -
Redis之分布式锁的实现
分布式锁在分布式系统中比较常见,常见的分布式锁解决方案有:zookeeper,创建顺序临时节点来实现redis实现(setnx / setnx命令)数据库唯一主键这篇文章主要介绍下redis分布式锁怎么实现。在了解分布式锁的实现之前,我们需要了解下分布式锁应该注意些什么:互斥性,即任何时刻都是一个客户端持有锁避免死锁,一个客户端挂掉之后不能释放锁,导致后面的客户端不能加锁保证加锁和解锁是同一个客户端只要大部分的Redis节点正常运行,客户端就可以进行加锁和解锁操作废话不多说,直接上原创 2020-07-01 15:29:08 · 10412 阅读 · 3 评论 -
Redis之常见问题以及解决方案
Redis通常是用来做缓存来使用的,使用缓存可以显著的提高程序的性能。但是在高并发的时候也容易出现一些问题。缓存雪崩缓存雪崩的问题可能是最常见的问题了,大家可能都遇到过。所谓缓存雪崩指的是大量key在同一时间大面积失效,请求缓存的时候请求不到,这个时候就会全都打到数据库中。针对缓存雪崩常见的解决方案有:给key设置失效时间的时候加一个随机值,这样子就不会造成大量的key在同一时间失效针对热点数据的key设置永不过期使用分布式缓存集群(持久化、主从复制、哨兵和集群)当然还有很小的几率以上的方案原创 2020-06-30 09:41:15 · 10272 阅读 · 0 评论 -
Redis之主从复制的实现
Redis高可用的方案包括持久化、主从复制(及读写分离)、哨兵和集群。这边文章就来介绍一些Redis的复制功能。在Redis中,用户可以通过执行SLAVEOF命令或设置salveof选项,让一个服务器去复制另一个服务器,我们称被复制的服务器叫主服务器(master),对主服务器进行复制的服务器叫做从服务器(slave)。为什么要使用主从复制当主服务器挂掉之后,从服务器可以继续工作,从而实现快速的故障恢复,可以看做是数据备份。在主从复制的基础上实现读写分离,即写在主服务器(master),读在从服原创 2020-06-28 19:37:57 · 8655 阅读 · 0 评论 -
Redis之事务的实现
Redis事务和数据库的事务严格意义来说是不一样的,Redis的事务是通过一组命令的集合,Redis事务提供了一种将多个命令请求打包,然后一次性的、按顺序的执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去执行其他客户端的命令请求。Redis 通过 MULTI(标记一个事务块的开始) 、 EXEC(执行) 、DISCARD(放弃执行事务块内的所有命令)和 WATCH(乐观锁) 四个命令来实现事务功能。一个事务从开始到结束通常会原创 2020-06-27 21:40:08 · 10349 阅读 · 0 评论 -
Redis之I/O多路复用技术(multiplexing)
在面试中通常会有这样子的场景↓↓↓↓↓↓面试官:看你的简历写到项目中有用到redis,可以聊聊redis吗求职者:可以哇。我在项目中主要使用了redis做商品信息的缓存,我会先从缓存中拿商品信息,如果缓存失效了再去数据库拿商品信息,最后更新缓存,这样子做直接提高了程序的性能并减少了DB的压力。求职者:redis很快,主要是因为完全基于内存,而且是单线程,使用了I/O多路复用模型。面试官:那你了解I/O多路复用技术在redis中的应用吗求职者:不是很了解。。。在了解I/O多路复用之前,我们可.原创 2020-06-25 21:43:37 · 12386 阅读 · 0 评论 -
Redis之持久化机制(RDB和AOF)
因为Redis是内存数据库,将自己的数据库状态都存在了内存中,如果不想办法将存在内存中的数据库状态保存到磁盘里,如果出现了断电或者服务器宕机的情况,那么在内存中的数据库状态也会消失不见。为了解决这个问题,Redis提供了两种解决方案:RDB和AOF。RDBRDB持久化是通过快照方式来完成的。当达到触发条件时,Redis会自动将内存中所有数据以二进制方式生成一份副本并存储在硬盘上。第一种是主动触发:指的是客户端执行save和bgsave命令会进行持久化redis> SAVEOK当sav原创 2020-06-23 17:43:29 · 10412 阅读 · 0 评论 -
Redis之内存淘汰机制和过期策略
之前的文章聊了一下redis的基本数据结构和两种特殊的数据结构,这篇文章主要分析一下redis的内存淘汰机制和缓存过期策略。缓存就是第一次请求数据库之后直接将取到的数据放到内存中,然后每次从内存中取数据,从而加快了速度,直接的提高了程序的性能。那么也带了一个问题,随着数据越来越多内存占用就会越来越大,因为内存是有限的,如果不约定一些内存淘汰机制和过期策略,内存很快就会被撑爆了。内存回收机制因为C语言不具备内存自动回收的功能,所以redis在自己的对象系统中构建了一个引用计数技术实现的内存回收机制,通过原创 2020-06-23 11:27:02 · 10546 阅读 · 0 评论 -
Redis之布隆过滤器(BloomFilter)
在实际的开发中通常会遇到数据去重的问题,比如判断用户是不是新用户,哪些用户登陆过系统等等这些类似的问题,比较容易想到的解决方案如下:使用set,但是数据量比较大的时候会非常浪费内存,并且性能也不高使用之前提到的BitMap,但是在数据稀疏的场景下,反而还不如set那么这种场景应该如何解决呢?业界有另外一个更优秀的数据结构来解决这类问题,那就是——布隆过滤器(BloomFilter)。...原创 2020-06-22 09:12:53 · 9115 阅读 · 2 评论 -
Redis之BitMap
之前介绍了基本数据类型及其数据结构,这篇文章主要介绍一下一种应用于特殊场景的对象:BitMap。首先思考以下的应用场景应该怎么解决:用户签到今天登陆的用户数量今天有哪些用户登录了某个用户是否点赞过某篇文章如果不使用redis,常见的解决方案就是建一个日志表,然后记录对应的记录,然后通过SQL将记录查询出来,这样子的解决方案不是不可以,而是这样子的效率很低,尤其随着日志越来越多的时候,统计分析起来会很慢。...原创 2020-06-19 21:29:44 · 9122 阅读 · 0 评论 -
Redis之基本数据类型及其数据结构
一直都有使用Redis,但是都停留在使用层面上,对其Redis的数据机构和原理并没有做过深入的研究,所以打算系统的学习一些Redis的核心知识点并记录下。redisObject数据结构redisObject 是 Redis 类型系统的核心, 数据库中的每个键、值,以及 Redis 本身处理的参数, 都表示为这种数据类型。/* * Redis 对象 */typedef struct redisObject { // 类型 unsigned type:4; // 编码方式原创 2020-06-18 16:55:39 · 12558 阅读 · 5 评论 -
Mac下安装Redis
虽然这种文章在网上一搜一大把,但本人还是决定记录下来。下载下载地址在官网下载之后,存放在本地目录。安装解压下载好的redis,tar zxvf redis-4.0.11.tar.gz进入到redis目录下:编译测试sudo make test编译安装 sudo make install启动redis服务进入到src目录下,执行./redis-serv...原创 2018-10-10 17:24:40 · 1219 阅读 · 0 评论 -
Redis常见的5种不同的数据类型详解
Redis简介以及和其他缓存数据库的区别前言Redis除了可以存储键还可以存储常见的5种数据类型,分别是:String、List、Set、Hash、ZSet。对于Redis的命令有一部分是可以公用的,但是还有一些其他的命令是属于特殊使用的。首先看看一张关于Redis5种数据结构的对比:下边就分别介绍5中国不同的数据结构类型。String字符串类型Redis中的String类型就是一...转载 2018-10-16 09:14:45 · 1673 阅读 · 0 评论