场景一:类似于微博,实现关注和被关注功能。

思路:

对每个用户使用两个集合类型键,用来存储关注别人的用户和被该用户关注的用户。当用户A关注用户B的时候,执行两步操作:

sadd user:A B

sadd user:B A

问题1:

完成一次用户关注操作,需要执行两步代码,第一次实现用户A关注B,成为了B的粉丝。而第二步的时候,因为某种原因没有执行或执行成功,则A并不知道B关注了自己

事务:

事务的原理是,先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。

一个事务中,要么都执行成功,要么都不执行

multi命令告诉redis准备介绍事务,先暂存起来,不要执行。然后发送需要一起执行的命令,最后exec结束事务,redis依次执行那么命令

如果在执行exec命令之前,因为某种原因,redis断掉了,Redis会清空事务队列.

问题2:

有些时候,我们不仅需要通过事务来处理一些必须一起成功的动作,比如银行转账,从银行卡1转出钱到银行卡2,必须是都一起成功,不能说从银行卡1中扣完钱之后,没有进到银行卡2账上,两者动作比如都要完成。还有些时候,我们既要一起完成,也需要根据其中一步操作的结果来进行下一步操作

WATCH命令

watch,事务中的另一个命令。监控一个或多个键,一旦其中一个键被修改或删除,之后的事务就不会执行,一直到exec结束。

通过watch监控key1,之后修改了key1,所以事务中的set命令并没有执行

场景二:限时活动,缓存,验证码失效

在实际开发中,经常会遇到限时活动,邮箱失效时间,验证码失效时间等场景,这些数据需要在一定的时间内有效,过期删除,如果在关系型数据库中保存这些数据,每次校验都需要查询数据,对比时间,然后将数据置为失效,或者删除。而在Redis中,则可以通过expire设置失效时间,自动删除。

expire设置失效时间,时间单位秒。成功返回1,如果key不存在返回0

当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。

注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1

实现缓存

为了提供网站的负载能力,需要将一个访问频路较高,且经过复杂计算或者IO资源消耗较大的操作的结果缓存起来,并设置一个失效时间。每次用户访问的时候,先检查该键是否存在,如果存在直接获取该元素并返回,如果不存在,则经过一系列计算并将结果缓存,设置失效时间,在返回给用户

问题:

这种缓存的实现,显然会有两个问题,第一个是缓存都是存在内容中的,如果大量的使用缓存会导致Redis沾满内存,另一方面,为了防止Redis沾满内存而设置失效时间的键,如果设置时间太短,就可能导致缓存命中率过低并且大量内容白白浪费。

使用方式:

在开发中,很难合理的设置键的生存时间,所以可以限制Redis使用的最大内存,并让Redis按照一定规则删除一些不需要的键。

具体方式,修改配置文件的maxmemory参数

OS X下通过Homebrew安装的redis的话,配置文件在/usr/local/etc/redis.conf

限制Redis最大内存之后,当超出了这个内存,会根据maxmemory-policy

指定的参数删除不需要的键。当设置此参数为allkeys-lru,一旦Redis内存超过了限制值时,Redis会不断删除数据库中最近最少使用的键,直到满足了当前内存大小限制

转载链接:https://www.cnblogs.com/simengphp/p/6261684.html

[转]Redis实现缓存,你应该懂的哪些思路!的更多相关文章

  1. 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路

    本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动 ...

  2. spring+redis的集成,redis做缓存

    1.前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.我们都知道,在日常的应用中,数据库瓶颈是最容易出现的 ...

  3. SpringAOP与Redis搭建缓存

    近期项目查询数据库太慢,持久层也没有开启二级缓存,现希望采用Redis作为缓存.为了不改写原来代码,在此采用AOP+Redis实现. 目前由于项目需要,只需要做查询部分: 数据查询时每次都需要从数据库 ...

  4. redis清空缓存

    进入redis命令行 首先启动redis服务 redis-server /home/redis/redis_7901.conf redis-cli -p 7901(指定进入端口号为7901的redis ...

  5. 基于redis分布式缓存实现

    Redis的复制功能是完全建立在之前我们讨论过的基 于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你 的 ...

  6. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

    问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...

  7. HAProxy 的负载均衡服务器,Redis 的缓存服务器

    问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...

  8. Nopcommerce 3.7 增加了Redis 作为缓存啦

    Nopcommerce 3.7  版增加了Redis 缓存,相比之前内存缓存, 感觉使用了Redis 作为缓存,明显加快了Web页面响应速度! 废话少说 拉代码: 1 git clone https: ...

  9. fourinone分布式缓存研究和Redis分布式缓存研究

    最近在写一个天气数据推送的项目,准备用缓存来存储数据.下面分别介绍一下fourinone分布式缓存和Redis分布式缓存,然后对二者进行对比,以供大家参考. 1  fourinone分布式缓存特性 1 ...

  10. Redis 作为缓存服务器的配置

    随着redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点:1. 除了Hash,还提供了Sorted Set, List等数据结构2. 可以持久化到磁盘 ...

随机推荐

  1. org.apache.hadoop.hbase.master.HMasterCommandLine: Master exiting java.lang.RuntimeException: HMaster Aborted

    前一篇的问题解决了,是 hbase 下面lib 包的jar问题,之前写MR的时候加错了包,替换掉了原来的包后出现另一问题:@ubuntu:/home/hadoop/hbase-0.94.6-cdh4. ...

  2. Vuex篇

    [Vuex篇] vuex源码你学会了吗? 我来免费教你!~ 1.vuex是什么?  Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的 ...

  3. jquery插件小集合

    一.滑动轮播插件Swiper Swiper官网http://www.swiper.com.cn/, 这款插件移动端,pc端均试用 二.jquery-tmpl----让你从拼接字符串中解放出来 官方下载 ...

  4. 【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)

    [解题思路] 给一张神图,推理写的灰常明白了,关键是构造共轭函数,这一点实在是要有数学知识的理论基础,推出了递推式,接下来就是矩阵的快速幂了. 神图: 给个大神的链接:构造类斐波那契数列的矩阵快速幂 ...

  5. !vtop 命令

    这命令超级牛B ,用途是算内存所在屋里地址 !vtop 命令可以有两个参数,第一个参数是CR3 寄存器的值,第二个参数是要查询的虚拟地址是多少,比如 kd> !vtop 19001e0 7c80 ...

  6. mysql全套

    1. 什么是数据库 存储数据的仓库 2. 什么数据: 大家所知道的都是数据.比如:你同学的名字,年龄,性别等等 3. 数据库概念 1.数据库服务器 2.数据库管理系统 重点 3.库 4.表 5.记录 ...

  7. android中的Handler消息传输机制

    android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就导致新启动的线程无法动态的改变界面组件的属性值.但是实际android应用开发中,需要新启动的线程周期性地 ...

  8. 从零开始搭建系统2.2——ELK安装及配置

    ELK 最新版本对JDK的最低要求是1.8,安装java_1.8版本 一.Elasticsearch 1.创建目录 2.下载安装包 wget https://artifacts.elastic.co/ ...

  9. 【学术篇】SPOJ FTOUR2 点分治

    淀粉质入门第一道 (现在个人认为spoj比bzoj要好_(:з」∠)_ 关于点分治的话推荐去看一看漆子超的论文>>>这里这里<<< 之前一直试图入点分治坑, 但是因 ...

  10. unity 打包Apk生成签名证书keystore

    进行Android项目开发中想要将androidapp导出为apk的时候需要选择一个数字证书,即keystore文件(android.keystore),它用来对我们的APP进行签名,是导出APP的一 ...