首页 / 数据库 / redis

Redis实现分布式锁之正确的加锁解锁方式

Redis分布式锁核心指令加锁和过期时间:加锁和设置锁的过期时间必须是一个完整的原子性操作既然是锁,我们肯定需要一个解锁的过程,如果我们没有设置锁的过期时间,一旦一个客户端出现故障没来得及解锁的话,锁会一直存在,导致死锁。要是存在过期时间的话,redis会自动删除锁Redis加锁并设置过期时间指令:...

2019-07-27
标签: redis    122

Redis和MongoDB的简单区别比较

就Redis和MongoDB来说,大家一般称之为Redis缓存、MongoDB数据库。这也是有道有理有根据的,Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单;MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,...

2017-10-18
标签: mongodb  redis    43

如何保证缓存和数据库双写一致性?

在项目中缓存是经常用到的,为了减少和数据库的交互,小伙伴们利用缓存的思路如下:以上场景需要考虑的是缓存数据更新与数据库一致的问题,主要分为以下几个场景:先更新数据库,再更新缓存存在的问题场景:请求A更新值为99,请求B更新值为98上图流程:1)请求A先发起,更新数据库为99,但还没有来得及更新缓存2...

2017-10-17
标签: mysql  redis    52

关于 缓存穿透、缓存击穿、缓存雪崩、热点数据失效问题的解决方案

在我们的平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询的时候都去查询到数据库。特别是高 QPS( QPS(Query Per Second),QPS 其实是衡量吞吐量(Throughput)的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求) 的系统,每次都去查询数据库...

2017-08-17
标签: redis    68

Memcache,Redis对比分析

当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其...

2017-07-13
标签: redis  memcache    60

分布式锁的实现方式

什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。1.线程锁主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lo...

2017-06-13
标签: mysql  redis    80

Redis实际应用场景解析

      Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis。转向Redis当然也是可取的,许多开发...

2016-08-10
标签: redis    52

Redis的数据结构和相关常用命令讲解

概述Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库、缓存服务或消息服务使用。Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。Redis具备LRU淘汰、事务实现、以及不同级别的硬盘持久化等能力,并且支持副本集和通过Redis...

2016-07-28
标签: redis    40

从哪几个方面解决Redis性能调优

尽管Redis是一个非常快速的内存数据存储媒介,也并不代表Redis不会产生性能问题。前文中提到过,Redis采用单线程模型,所有的命令都是由一个线程串行执行的,所以当某个命令执行耗时较长时,会拖慢其后的所有命令,这使得Redis对每个任务的执行效率更加敏感。针对Redis的性能优化,主要从下面几个...

2016-07-20
标签: redis    58

集群间如何实现session共享的分析

一、引言针对企业,为了应对庞大的用户访问压力,目前大多数大型网站服务器都采用集群部署的方式;针对个人,仅一台服务器而言,也会安装多个tomcat进行错时更新,保证更新后台业务时服务不断开,即模拟了集群的运行方式。在此集群中,我们就不得不考虑一个用户鉴权的问题,即在不同服务上如何保证用户均已登录,并能...

2016-07-14
标签: redis    64

Redis数据持久化和数据淘汰机制

Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性。必须使用数据持久化吗?Redis的数据持久化机制是可以关闭的。如果你只把Redis作为缓存服务使用,Redis中存储的所有数据都不是该数据的主体而仅仅是同...

2016-07-14
标签: redis    61

单点登录的原理解析

从巨石应用发展至今,我们有SOA,有微服务,其道理都是一样的,都是进行了业务拆分来分解为多个系统,多个系统完全解耦,可以分别部署在不同的服务器上,项目之间通过rpc或者restful来实现相互通信,举个栗子:order.abc.com  cart.abc.com  service...

2016-06-14
标签: redis  PHP  JAVA    61

redis过期策略和持久化

1.1键的过期时间 Redis是基于内存,内存是比较昂贵的,容量肯定比不上硬盘的。就我们现在一台普通的机子,可能就8G内存,但硬盘随随便便都1T了。因为我们的内存是有限的。所以我们会干掉不常用的数据,保留常用的数据。这就需要我们设置一下键的过期(生存)时间了。设置键的生存时间可以通过EXPIRE或...

2016-06-09
标签: redis    69

redis如何解决缓存雪崩?

  为什么要用缓存(Redis):现在有个问题,如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了。我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redis需要对数据设置过期时间,并采用的是惰性删除+定期删除两种策略对过期键删除。如果缓存数据设置的过期时间...

2016-06-08
标签: redis    75

redis如何解决缓存穿透

什么是缓存穿透比如,我们有一张数据库表,ID都是从1开始的(正数):但是可能有黑客想把我的数据库搞垮,每次请求的ID都是负数。这会导致我的缓存就没用了,请求全部都找数据库去了,但数据库也没有这个值啊,所以每次都返回空出去。    缓存穿透是指查询一个一定不存在...

2016-06-08
标签: redis    87

如何保证redis缓存与数据库mysql双写时一致的问题?

一、对于读操作,流程是这样的讲缓存穿透的时候也提到了:如果从数据库查不到数据则不写入缓存。一般我们对读操作的时候有这么一个固定的套路:1.如果我们的数据在缓存里边有,那么就直接取缓存的。2.如果缓存里没有我们想要的数据,我们会先去查询数据库,然后将数据库查出来的数据写到缓存中。3.最后将数据返回给请...

2016-06-08
标签: mysql  redis    51

redis缓存和mysql数据库同步的问题

解决方案一、对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。二、对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。三、使用阿里的...

2016-06-07
标签: mysql  redis    63

redis数据库简介以及与Memcached和MongoDB的比较

       redis是目前使用最广的nosql数据库之一,主要用于数据的缓存以及消息队列,其目的主要是减轻服务器的压力,提高数据的访问效率;由于redis的数据是存储在内存中的,所以在实际运用中,应考虑服务器的内存大小。Redis 是一个高性能(key/v...

2015-08-12
标签: mongodb  redis  memcache    52

浅述Session的持久化的作用与原理

为什么需要持久化客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即...

2015-07-15
标签: redis  PHP  JAVA    70

redis实现高并发下的抢购/秒杀功能

抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢?常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数,所以在高并发下只使用mysql来做处理的话,是无法保证商...

2015-06-16
标签: redis    60