【中间件-Redis】
文章平均质量分 88
【数据库 - Redis】
我一直在流浪
这个作者很懒,什么都没留下…
展开
-
Redis实战 - 17 Redis事务和乐观锁实现缓存登录图片验证码功能
用户登录时会让填写图片验证码,我们的产品需求是实现图片验证功能,验证码最多获取60次,超过60次后获取验证码功能会被锁定,锁定时长为10min,这里将实现的业务功能做一个简单总结;原创 2022-10-29 16:49:32 · 1239 阅读 · 0 评论 -
Redis实战 - 16 SpringBoot整合Redis事务报错 ERR EXEC without MULTI
在执行 EXEC 命令之前,没有执行 MULTI 命令。而我们项目中实际执行了MULTI 命令,查看exec 方法的执行源码得知由于 enableTransactionSupport 属性的默认值是 false,导致了每一个 RedisConnection 都是重新获取的。所以,我们刚刚执行的 MULTI 和 EXEC 这两个命令不在同一个 Connection 中。使用 SessionCallBack 接口,从而保证所有的命令都是通过同一个 Redis 的连接进行操作。原创 2022-10-29 15:41:39 · 1556 阅读 · 1 评论 -
Redis实战 - 14 Redis Hash 记录密码的登录错误次数和达到限制登录次数的时间
Redis Hash 记录密码的登录错误次数和达到限制登录次数的时间。原创 2022-10-27 07:37:00 · 764 阅读 · 0 评论 -
Redis实战 - 13 Redis 实现密码策略缓存
因为dataValue的值为对象序列化之后的字符串,因此需要写一个工具类,在参数为对象时将其序列化为json字符串存入数据库表,在从数据库表中取出数据时将dataValue反序列化为对象;读取密码策略 StorageApplicationTest。密码策略实体类 PasswordPolicyEntity。可以看到dataValue的值为对象序列化后的字符串;原创 2022-10-26 23:42:35 · 399 阅读 · 0 评论 -
Redis实战 - 12 Redis 实现餐厅缓存功能
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。比如我们通常是直接查询MySQL数据库,那在高并发情况下,大量查询MySQL数据库会导致数据库性能变慢,因此我们在应用层与MySQL之间搭建一个Cache层,让请求先访问Cache,这样就能大大降低数据库的压力,提高性能。原创 2022-10-22 23:00:14 · 642 阅读 · 0 评论 -
Redis实战 - 11 Redis GEO 实现附近的人功能
各种社交软件里面都有附件的人的需求,在该应用中,我们查询附近1公里的食客,同时只需查询出20个即可。原创 2022-10-22 21:12:17 · 2596 阅读 · 0 评论 -
Redis实战 - 10 Redis 实现用户积分和积分排行榜功能
① 添加积分:在签到的基础上添加用户积分(签到1天送10积分,连续签到2天送20积分,3天送30积分,4天以上均送50积分)② 积分排行榜设计。原创 2022-10-21 07:44:17 · 1155 阅读 · 0 评论 -
Redis实战 - 09 Redis BitMaps 实现用户签到,统计签到次数,统计签到情况等功能
如果这样存数据的话,对于用户量比较大的应用,数据库可能就扛不住,比如1000W用户,一天一条,那么一个月就是3亿数据,这是非常庞大的,因此使用 redis 的 bitmaps 优化。考虑到每月初需要重置连续签到次数,最简单的方式是按用户每月存一条签到数据(也可以每年存一条数据)。用户签到,默认是当天,但可以通过传入日期补签,返回用户连续签到次数(后续如果有积分规则,就会返回用户此次签到积分)获取用户某月签到情况,默认当前月,返回当前月的所有日期以及该日期的签到情况。用户需求:统计某月签到次数,默认是当月。原创 2022-10-20 07:15:25 · 1473 阅读 · 0 评论 -
Redis实战 - 08 Redis 的 BitMaps 位图命令
命令可以将一个 Redis 字符串看作是一个由二进制位组成的数组, 并对这个数组中储存的长度不同的整数进行访问 (被储存的整数无需进行对齐)。默认情况下整个字符串都会被检索一次,只有在指定start和end参数(指定start和end位是可行的),该范围被解释为一个字节的范围,而不是一系列的位。命令可以在一次调用中同时对多个位范围进行操作: 它接受一系列待执行的操作作为参数, 并返回一个数组作为回复, 数组中的每个元素就是对应操作的执行结果。—— 对指定的二进制位范围执行加法操作,并返回它的旧值。原创 2022-10-14 07:26:03 · 771 阅读 · 0 评论 -
Redis实战 - 07 Redis 缓存AkSk信息封装AkSkCacheHolder
flyway的加载是由。可以看到 AkSkCacheUtils 这个 Bean 实现了 InitializingBean 接口,在项目启动的时候会执行 afterPropertiesSet() 方法实现自定义初始化逻辑,在该方法中需要访问数据表,但是表中的数据需要 flyway 去初始化 sql 脚本,如果不让AkSkCacheUtils 这个bean的加载控制顺序在 flyway 执行后,会出现各种报错。所有AKSK在redis做了加密缓存:业务方如需使用,提供管理类可以拿到。这个 bean 负责的。原创 2022-10-13 19:33:41 · 488 阅读 · 0 评论 -
Redis实战 - 06 Redis Zset Set 实现朋友圈,微博等Feed流产品功能
在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈,微博,就是一种非常典型的Feed流产品,还有图片分享网站Pinterest,花瓣网等又是另一种形式的Feed流产品。当A用户关注B用户时,那么要实时的将B的所有Feed推送到A用户的Feed集合中,同样如果A用户取关B用户,那么要将B用户所有的Feed从A用户的Feed集合中移除。登录用户每次发送朋友圈都会向粉丝的feeds集合中推送这条朋友圈,那么当粉丝就可以获取关注的人的所有feeds。原创 2022-10-12 21:14:30 · 1008 阅读 · 0 评论 -
Redis实战 - 05 Redis 实现好友功能(关注,取关,共同关注)
类似于这样的功能我们如果采用数据库做的话只是单纯得到用户的一些粉丝或者关注列表的话是很简单也很容易实现, 但是如果我想要查出两个甚至多个用户共同关注了哪些人或者想要查询两个或者多个用户的共同粉丝的话就会很麻烦, 效率也不会很高。但是如果你用redis去做的话就会相当的简单而且效率很高。好友功能是目前社交场景的必备功能之一,一般好友相关的功能包含有:关注/取关、我(他)的关注、我(他)的粉丝、共同关注、我关注的人也关注他等这样一些功能。③ 让 id=11 的登录用户关注id=1,id=3,id=4的用户。原创 2022-10-09 23:09:42 · 2265 阅读 · 2 评论 -
Redis实战 - 04 Redis 分布式锁应用之抢购代金券
2. 抢购活动表3. 订单表2. 秒杀场景的解决方案秒杀场景有以下几个特点:大量用户同时进行抢购操作,系统流量激增,服务器瞬时压力很大;请求数量远大于商品库存量,只有少数客户可以成功抢购;业务流程不复杂,核心功能是下订单。秒杀场景的应对,一般要从以下几个方面进行处理,如下:① 限流:从客户端层面考虑,限制单个客户抢购频率;服务端层面,加强校验,识别请求是否来源于真实的客户端,并限制请求频率,防止恶意刷单;应用层面,可以使用漏桶算法或令牌桶算法实现应用级限流。② 缓存:热点数据都从缓存获得,尽可能减原创 2022-10-05 13:38:05 · 2347 阅读 · 7 评论 -
Redis实战 - 03 RedisTemplate 的 hash 结构
(域-值)对设置到哈希表。原创 2022-10-04 12:38:45 · 1031 阅读 · 0 评论 -
Redis实战 - 02 Redis 保存短信验证码实现用户注册
将短信验证码以字符串保存到Redis,同时设置过期时间,确保跟需求一致,利用Redis不仅按需保存带有过期的验证码,而且还是进程级别的共享数据,能够保证在多个Diner微服务中读取。① 用户首先输入手机号,发送短信验证码,当用户输入手机号时需要校验手机号是否注册。② 全局异常处理 GlobalExceptionHandler。② 用户输入用户名,密码,手机号验证码完成注册功能。① 断言工具类 AssertUtil。原创 2022-10-01 16:12:28 · 2202 阅读 · 1 评论 -
Redis实战 - 01 Redis 和 SpringSecurity Oauth2 实现认证授权中心
创建父项目 food-social-contact-parent,导入公共依赖2. commons 公共服务1. 全局常量类 ApiConstant2. 全局异常类 ParameterException3. 实体对象公共属性 BaseModel4. 公共返回对象 ResultInfo5. 食客实体类 Diners6. 公共返回对象工具类 ResultInfoUtil3. ms-registry 注册中心服务4. ms-oauth-server 认证授权中心服务1.原创 2022-10-01 11:08:07 · 1390 阅读 · 2 评论 -
Redis - String|Hash|List|Set|Zset基本数据类型的介绍
字符串是Redis最简单的储存类型,它存储的值可以是。原创 2022-08-10 09:48:54 · 202 阅读 · 0 评论 -
Redis - String|Hash|List|Set|Zset数据类型的基本操作和使用场景
redis命令大全可参考:http://doc.redisfans.com/index.html2. 切换数据库Redis单机服务器总共有16(0~15)个数据库,而且各个数据库之间是不能共享数据的。登录之后默认选择db0。要切换数据库,可以使用如下命令:3. 删除键如果要在业务中删除不需要的键,可以使用del命令:4. 删除当前数据库的所有键要删除当前数据库的所有键,可以执行flushdb命令:5. 为指定键设置过期时间为给定 设置生存时间,当 过期时(生存时间为 ),它会被自动删除原创 2022-08-09 22:52:12 · 561 阅读 · 0 评论 -
Redis - Linux系统安装redis服务并启动
如果6379端口还是不同,那么就用下面方法解决:http://t.zoukankan.com/liurengang-p-8671264.html。修改redis.conf配置文件:将守护进程设置为yes。① 前台启动:进入redis的安装目录下的bin目录。① 判断服务器地址能否ping通。③ 查看服务器的端口是否通。② 关闭redis服务。② 查看防火墙是否开启。将下面的内容粘贴进去。...原创 2022-08-06 21:12:48 · 884 阅读 · 0 评论 -
Redis - 更新数据时如何保证MySQL和Redis中的数据一致性?
01、如何理解数据的一致性?1)强一致性如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大。2)弱一致性这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态。3)最终一致性最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这原创 2022-07-01 08:39:42 · 1354 阅读 · 0 评论 -
Redis - 如何利用读缓存提高系统性能?
数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验就会收到影响,因此可以使用缓存改善网站性能。网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。淘宝买家浏览的商品集中在少部分成交数多、评价良好的商品上;百度搜索关键词集中在少部分热门词汇上;只有经常登录的用户才会发微博、看微博,而这部分用户也只占总用户数目的一小部分。既然大部分的业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,是不是就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善原创 2022-06-30 19:53:15 · 687 阅读 · 0 评论 -
Redis - 自定义序列化方式
1. 如何实现redis的序列化?序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。序列化主要用于存储对象状态为另一种通用格式,比如存储为二进制、xml、json等等,把对象转换成这种格式就叫序列化,而反序列化通常是从这种格式转换回来。使用序列化主要是因为跨平台和对象存储的需求,因为网络上只允许字符串或者二进制格式,而文件需要使用二进制流格式,如果想把一个内存中的对象存储下来就必须使用序列化转换为xml(字符串)、json(字符串)或二进制(原创 2020-07-30 11:06:45 · 3591 阅读 · 0 评论 -
Redis - 持久化机制AOF和RDB
文章目录1. redis的持久化机制1.1 RDB的工作原理1.2 AOF的工作原理1.3 如何选用持久化策略?1. redis的持久化机制操作系统和安装目录:CentOS 7 ;位置:/opt/redis-4.0.11;启动位置:/opt/redis-4.0.11/src;什么是redis的持久化机制?redis将所有的数据保存在内存中,为了保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,然后在特定的时间将保存的数据进行恢复,这一过程就是持久化。持久化是为了防止数据的意外丢失,确保数据的原创 2020-07-09 19:03:36 · 502 阅读 · 0 评论 -
Redis - 5种基本数据类型
文章目录一、Redis常用命令操作1、String类型2、Hash类型3、列表类型list4、无序集合set5、有序集合sorted sort二、分布式共享session三、异地登录提醒下线四、注册短信验证码一、Redis常用命令操作1、String类型赋值命令:set key value取值命令:get key数字递增:incr key数字递减:incr key增加指定的整数:incrby key increment减少指定的整数:decrby key decrementE:\Redis原创 2020-06-25 15:31:21 · 439 阅读 · 0 评论 -
Redis - Redis基础_发布订阅_事务_持久化
文章目录一、Redis发布订阅二、多数据库三、Redis事务示例1: multi & exex示例2:discard放弃队列运行示例3:事务的错误处理示例4:事务的错误处理示例5:事务的watch示例5 :unwatch四、Redis持久化1. RDB2. AOF五、总结1. 穿透2. 雪崩3. 热点key一、Redis发布订阅简介Redis 发布订阅(pub/sub)是一种消息...原创 2020-03-06 11:31:24 · 332 阅读 · 1 评论 -
Redis - Redis基础_List类型_Set类型_ZSet类型(有序集合)
1. List类型Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)赋值语法:LPUSH key value1 [value2] :将一个或多个值插入到列表头部(从左侧添加)RPUSH key value1 [value2] :在列表中添加一个或多个值(从右侧添加)LPUSHX key value :将一个值插入到已存在的列表头部...原创 2020-03-05 22:44:04 · 910 阅读 · 1 评论 -
Redis - Redis基础_Key键命令_String类型_Hash类型_java连接Redis_SpringData整合Redis
文章目录一、Redis键key基本命令二、Redis数据类型1、String命令(json串)与应用场景2、Hash命令(一个javaBean对象)与应用场景三、java连接Redis四、SpringData整合Redis一、Redis键key基本命令Redis 键命令用于管理 redis 的键:该命令用于在 key 存在时删除 key:del key序列化给定 key ,并返回被序...原创 2020-03-05 17:26:36 · 464 阅读 · 1 评论 -
Redis - Redis基础_启动_关闭_配置
文章目录一、 Redis简介二、 Linux安装Redis1.Redis的安装2. 启动Redis服务3. 启动Redis客户端三、Linux配置Redis1. 配置Redis2. redis.conf 配置文件详解四、自定义redis配置五、Redis启动与关闭一、 Redis简介redis单个key 存入512M大小redis支持多种类型的数据结构(string,list,hash.se...原创 2020-03-04 22:15:30 · 439 阅读 · 1 评论