Redis

java操作lua脚本

柔情痞子 提交于 2020-10-23 12:17:10
java操作lua脚本实例 前言 在上一篇文章 Redis中使用Lua脚本来实现并发下的原子操作 中我对Lua语言的一些简单的语法及其在Redis中的操作进行了介绍,但是在Java开发中我们还需要进一步的学习才能使这种技术落地。今天就结合Spring Data Redis这个我们经常使用的Redis开发组件来实际尝试一下Lua 脚本。 Lua 实现抽奖 模拟一个抽奖场景,从奖池中进行随机抽奖。规则如下: 中奖的人只能从奖池中抽取。 每个人只能中奖一次。 中奖总人数不能超过奖项的设置数。 生成中奖名单。 规则有了,我们先来分析如何使用Redis实现。Redis提供了SET集合,这种集合有点类似Java中的Set,放无重复的元素而且是无序的,可以满足随机性和奖池候选人的唯一性。同时它还提供了很多操作来满足抽奖的需要。接下来我们进行一一演示。 Redis SET 的一些操作。 基于篇幅我这里只演示一些抽奖可以用的上的Redis操作。 SET添加元素。 添加一个到多个元素,使用SADD命令往lottery中添加多个元素来模拟往奖池中加人。 127.0.0.1:6379> sadd lottery u1 u2 u3 u4 u5 u6 u7 (integer) 7 127.0.0.1:6379> sadd lottery u1 (integer) 0

Redis学习笔记(十五)Sentinel(哨兵)(中)

你说的曾经没有我的故事 提交于 2020-10-23 11:02:43
上一篇 我们模拟了单机器下哨兵模式的搭建,那么接下来我们看下哨兵模式的实现与工作。 为什么又分成两篇呢?因为篇幅太长(偷懒),再一个这篇主要说的是Sentinel的初始化以及信息交换,下一篇着重说下状态检查、Sentinel头领选举与故障转移 。 启动并初始化Sentinel 当一个Sentinel启动时,需要执行以下步骤: (1)初始化服务器。 因为Sentinel本事上是一个运行在特殊模式下的Redis服务器,所以启动时的第一步也就是初始化一个普通的Redis服务器。不同点是在初始化的时候不会载入RDB或AOF文件。 (2)将普通的Redis服务器使用的代码替换成Sentinel专用代码。 端口替换Redis服务器使用redis.h/REDIS_SERVERPORT(6379)常量作为服务器端口,而Sentinel则使用sentinel.c/REDIS_SENTINEL_PORT(26379)常量作为服务器端口。 另外Redis服务器使用redisCommandTable服务器作为命令表,而Sentinel则使用sentinelcmds作为服务器的命令表,并且其中的info命令会使用Sentinel模式下专用的sentinelInfoCommand函数,而不是普通redis服务器使用的redis.c/infoCommand函数。 (3)初始化Sentinel状态。

asp.net core之SignalR

时光怂恿深爱的人放手 提交于 2020-10-23 08:39:34
SignalR 是什么? ASP.NET Core SignalR 是一个开源的实时框架,它简化了向应用中添加实时 Web 功能的过程。 实时 Web 功能是服务器端能够即时的将数据推送到客户端,而无需让服务器等待客户端请求后才返回数据。 SignalR 主要适用于: 从服务器获取数据并高频更新的应用。比如股票,GPS应用等。 仪表板和监视应用。比如状态实时更新等。 需要通知的应用。比如即时聊天工具,以及社交网络里面的通知等。 协作应用。比如团体会议软件。 SignalR 支持下面几种底层传输技术: Web Socket 是不同于HTTP的另一种TCP协议。它是全双工的通信协议,浏览器和服务器之间可以相互通信。它会保持长连接状态只到被主动关闭。它支持文本和二进制的消息传输,也支持流媒体。其实正常的HTTP请求也是使用TCP Socket. Web Socket标准使用了握手机制把用于HTTP的Socket升级为使用WS协议的 WebSocket socket. 服务器发送事件 (Server Sent Events) 服务器可以在任何时间把数据发送到浏览器,而浏览器则会监听进来的信息,并使用一个叫做EventSource的对象用来处理传过来的信息。这个连接一直保持开放,直到服务器主动关闭它。它是单向通信,只能发生文本信息,而且很多浏览器都有最大并发连接数的限制。 长轮询(Long

5.docker学习笔记之入门,redis配置优化

一曲冷凌霜 提交于 2020-10-23 08:32:52
内存分配:vm.overcommit_memory Redis是内存操作,需要优先使用内存。设置overcommit 为1。是为了让 fork 操作能够在低内存下也执行成功。Linux 操作系统对大部分申请内存的请求都回复 yes,以便能运行更多的程序。因为申请内存后,并不会马上使用内存,这种技术叫做 overcommit。 vm.overcommit_memory 用来设置内存分配策略,有三个可选值 THP:Redis 在启动时可能会看到如下日志: WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

Springcloud 微服务 高并发(实战1):第1版秒杀

穿精又带淫゛_ 提交于 2020-10-23 07:22:46
疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列之15 【 博客园总入口 】 前言 疯狂创客圈 (笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一、 版本1 :springcloud + zookeeper 秒杀 二、版本2 :springcloud + redis 分布式锁秒杀 三、版本3 :springcloud + Nginx + Lua 高性能版本秒杀 以及有关Springcloud 几篇 核心、重要的文章 : 一、 Springcloud 配置, 史上最全 一文全懂 二、 Springcloud 中 SpringBoot 配置全集 , 收藏版 三、 Feign Ribbon Hystrix 三者关系 , 史上最全 深度解析 四、 SpringCloud gateway 详解 , 史上最全 本文:是**第一个版本 springcloud + zookeeper 秒杀 **实现,文章比较长,大家可以挑选感兴趣的部分,选择性阅读。 本文的秒杀效果图: 提示 : 本文内容,稍微有些陈旧,最新的源码和最新内容,请关注高并发社群—— 疯狂创客圈 1 为何要以秒杀做为高并发实战案例? 时间调到在单体架构还是主流的年代,那时候,大家学习J2EE技术的综合性实战案例,一般来说,就是从0开始实现,一行一行代码的

Redis通过主从复制完成数据迁移

无人久伴 提交于 2020-10-23 04:53:38
Redis通过主从复制完成数据迁移 进入新的服务器,执行从库配置, slaveof 命令配置当前Redis的主机, info 命令可以查看Redis的信息。执行完 slaveof 命令后执行 info 命令查看 master_link_status 的值如果为 up 表示同步完成。这时候该Redis的角色为slave。 同步完成后执行 slaveof no one 断开主从,这时候该Redis角色变为master。 $ redis-cli 127.0.0.1:6379> slaveof 主机IP 主机端口 127.0.0.1:6379> info 127.0.0.1:6379> slaveof no one 来源: oschina 链接: https://my.oschina.net/u/4342102/blog/4370650

Redis中,必须知道的那些事(Redis面试必问)

纵然是瞬间 提交于 2020-10-23 00:01:16
提到Redis,相信大多数开发者在面试或者实际开发过程中对缓存雪崩,穿透,击穿并不陌生吧;下面就来看看这三者到底有什么区别?又如何防止这种情况发生呢? 先来看看什么是缓存雪崩 开发中,针对系统中的热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题: 举个简单的例子:如果所有热点数据的Key失效时间都是12小时,中午12点刷新的,零点的时候(距离中午刷新点刚好过了12个小时)因某种原因(活动,促销等)有大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住。此时,如果没用什么特别的方案来处理这个故障时,就会非常难堪了,因为就算你重启了数据库,但是数据库立马又被新的流量给搞挂了。 同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂.此时用户内心👇 如何防止这种情况呢? 处理这个问题的关键:就是要确保数据不会在同一时间大面积失效 思路有了,处理起来就不难了,下面是几种方案: 在批量往Redis存数据的时候

Java面试札记

荒凉一梦 提交于 2020-10-22 19:06:38
Java面试札记 在最深的夜里,即使是你的影子也会离你而去。 背景 :愿某人在中秋节之前吃上大厂月饼!!!@CDZ 1、Java的八种基本数据类型? 整型:byte、int、short、long; 浮点型:float、double; 布尔类型:boolean; 字符型:char。 2、什么是重入锁? java.util.concurrent.ReentrantLock,这个是JDK1.5添加的一种颗粒度更小的锁,它完全可以替代synchronized关键字来实现它的所有功能,而且ReentrantLock锁的灵活度要远远大于synchronized关键字。 3、Controller是单例还是多例? Spring管理的Controller,即加入@Controller注入的类,默认是 单例 的,因此建议: 1、不要在Controller中定义成员变量; 2、若必须要在Controller中定义一个非静态成员变量,则通过注解@Scope("prototype"),将其设置为多例模式; 4、StringBuffer和StringBuilder的区别? StringBuffer是线程同步安全的,StringBuilder是非线程安全的一般用于单线程; 5、为什么要加双重锁? 1、为什么要进行第一次判空? 单例模式只有第一次执行create()方法的时候才会走synchronized中的代码