当前位置: 首页 > news >正文

品牌工厂网站建设整合营销传播的六种方法

品牌工厂网站建设,整合营销传播的六种方法,.cn域名可以做英文网站吗,wordpress漂亮手机网站模板redis是一款内存型数据库,在开发工作中经常用到,功能强大; 特别开一篇文章用来记录一下它的常见用法,算是一种总结; 它最主要的特点就是高可用的,速度快,分布式;有人说速度快&…

redis是一款内存型数据库,在开发工作中经常用到,功能强大;

特别开一篇文章用来记录一下它的常见用法,算是一种总结;

它最主要的特点就是高可用的,速度快,分布式;有人说速度快,能有我本地的全局静态变量快?但是在大型的项目中,多个服务器部署时,其他服务实例节点如何获取到你单个节点JVM中存储的这个全局静态变量?数据不一致怎么办?如果只是用来读取还好,但凡涉及到修改,都建议使用redis管理这部分常用而又准备的数据;

日常的工作可以是为某个业务功能开发,也可以是单纯的为实现某一项自认为的技术开发;

我总结了下一些常用的场景:

1、用于分布式的数据锁

在一个告警的模块,我们对单个对象的告警消息提示要做频率限制,不然会导致频繁推送单个对象的告警消息;例如:单个对象在10分钟内,最多仅可提示一条消息;代码片段如下:

//如果最近10分钟内已推送信息,则跳过
if (!redisTemplate.opsForValue().setIfAbsent(PARK_COUPON_ERROR_REDIS_KEY + order.getId(), 1, errmsgInterval, TimeUnit.SECONDS)) {continue;
}

在一个抽奖秒杀的功能中,我用redis来防止用户频繁点击,超过活动限定次数的抽奖,避免数据错乱的情况;

//避免 单用户频繁点击
Boolean setIfAbsent = redisTemplate.opsForValue().setIfAbsent(userKey, LocalDateTime.now().toString(), Duration.ofSeconds(10));
if (ObjectUtil.isNotEmpty(setIfAbsent) && !setIfAbsent) {log.info("单用户加redis失败 ,耗时{}ms", stopwatch.getTotalTimeMillis());throw new ServiceException("请勿频繁点击领券");
}

2、用于内存存储高频调用数据

在redis中存储高频数据的作用非常大,可以有效地降低程序的处理时间;但是一般建议将该模块设计巧妙一些,而不是一股脑将所有数据全部扔进去;redis是内存数据库,比通过mysql查询的效率往往高得多,因此可以提高程序的处理效率,且对于高频的查询数据放入redis中可以减少mysql的查询压力;

例如:秒杀活动中的奖品,打乱一次性存入队列,后续抽奖按顺序取出即可;不用查询MySQL

//将抽奖的随机性转移到奖品元素入队顺序的随机性
Collections.shuffle(prizeList);
redisTemplate.opsForList().leftPushAll(LOTTERY_LOTTERY_PRIZE + lotteryId, prizeList);

例如:抽奖活动中,用户再次点击,判断用户是否还剩余抽奖的权限,而不用查询数据库,对于这种限制一天一次,或者限制一周N次这样的情况;

List<ChargingUserMarketingCoupon> userCouponList = chargingUserMarketingCouponService.list(new QueryWrapper<ChargingUserMarketingCoupon>().lambda().
eq(ChargingUserMarketingCoupon::getMarketingId, lotteryId).
eq(ChargingUserMarketingCoupon::getUserId, SecureUtil.getUserId()).
ge(ChargingUserMarketingCoupon::getCreateTime, start).
le(ChargingUserMarketingCoupon::getCreateTime, end));
String key = LOTTERY_USER_DELIVERY_NUM + ":" + lotteryId + ":" + DateUtil.format(start, "yyyyMMdd") + ":" + AuthUtil.getUserId();
redissonClient.getAtomicLong(key).set(userCouponList.size());

可以巧妙设计KEY,来实现对单个对象,某个日期中抽奖次数的存储和更新;

3、用于实现一些特殊的场景

例如:抽奖活动,使用队列一次性将奖品全部入队,然后再出队列,便不用查询数据库,且可以方便实现队列出完就识别为抽奖活动结束的逻辑;

		Object o = null;try {o = redisTemplate.opsForList().leftPop(LOTTERY_LOTTERY_PRIZE + lottery.getId(), 1, TimeUnit.SECONDS);} catch (Exception e) {e.printStackTrace();throw new ServiceException("当前抽奖人数过多,请稍后重试!");}//仍然为NULL,则说明奖品发放完毕,leftPop操作没有元素if (ObjectUtils.isEmpty(o)) {throw new ServiceException("本次活动奖品已发放完毕,请关注下次活动!");}

这里需要注意,redis中的队列元素在出队完毕后,key会自动删除的;此时可能会报错,而不是取出NULL数据,开发时踩过坑;

就记录这么多吧,要搬砖了;

总之一句话,就是合理使用redis的各大数据结构和特性,来实现产品的特殊功能;

开发过程中要考虑周到,对于redis中数据存入后仅读取的情况还好,对于要频繁修改的数据还要考虑多线程并发等的问题;注意开发过程中可能的踩坑;

http://www.hkea.cn/news/841987/

相关文章:

  • 南昌专业做网站公司竞价托管怎么做
  • 网站产品展示怎么做微信小程序建站
  • dw做网站的流程客户引流的最快方法是什么
  • 做网站app优惠活动的交换链接营销成功案例
  • 企业公示信息查询系统山西上海百度推广优化公司
  • 上海网站排名优化价格武汉百度快照优化排名
  • 做网站小程序如何做广告宣传与推广
  • 网站建设背景朝阳百度新闻网页
  • 专门做拼团的网站西安网站开发
  • 怎么看网站开发语言太原seo推广
  • 什么网站做宣传好新乡网站seo
  • 济南网站制作服务价格信息流优化师前景
  • 新手制作网站工具bt磁力猪
  • 怎么做网站系统深圳头条新闻
  • 北京网站设计公司新鸿儒seo公司的选上海百首网络
  • 百姓网二手拖拉机百度seo优化排名客服电话
  • 北京南站是丰台站吗seo优化什么意思
  • 外贸营销型建站关键词全网搜索工具
  • 有什么网站可以做扣扣头像腾讯企点app下载安装
  • 网站设计怎么做链接拉新推广怎么快速拉人
  • 怎么自己做礼品网站补肾壮阳吃什么药效果好
  • 网站用户建设的设计与实现网站推广营销运营方式
  • html5韩国网站模板seo网站优化培训班
  • 网站被iframe信息推广的方式有哪些
  • 通信技术公司网站建设app推广代理
  • 做电影网站会违法吗营销说白了就是干什么的
  • 用外链技术做视频网站关键词在线听免费
  • 做网站常用的css最近三天的新闻热点
  • 全国人大常委会副委员长登封seo公司
  • 顶岗实践网站开发推广管理