lua

Redis 为什么默认 16 个数据库?

我怕爱的太早我们不能终老 提交于 2021-01-10 11:44:26
来源:SapphireCoder https://www.toutiao.com/a6752317753866060299 导读: 在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。 一、16个数据库的由来 Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。 Redis默认支持16个数据库,可以通过调整Redis的配置文件 redis/redis.conf 中的databases来修改这一个值,设置完毕后重启Redis便完成配置。 客户端与Redis建立连接后会默认选择0号数据库,不过可以随时使用SELECT命令更换数据库。 # 切库 redis> SELECT 1 # 默认0号db,切换为1号db OK redis [1] > GET username # 从1号库中获取 username (nil) 在实际项目中则可以通过以Redis配置文件的形式指定数据库,如下图所示 二、正确理解Redis的“数据库”概念 由于Redis不支持自定义数据库的名字

nginx 访问控制模块

扶醉桌前 提交于 2021-01-09 12:15:37
截图,代码截屏均引用自慕课网nginx相关教学视频 基于用户的访问控制模块 http_access_module 基于用户登录信任的模块 http_access_module 参数示意:address 具体的ip地址,CIDR----网段例如192.168.0 unix:一种按照socket访问的方式 all;不做任何访问限制 有allow 对应的就有 deny;显然,在http语境下或是在location语境下,产生控制的范围是不一样的 准备工作,从default.conf中复制一份副本出来 命名为access_mod.conf 对于access_mod.conf文件 nginx启动时是否会加载呢?答案是肯定的,因为打开主配置文件conf.d(如下图:)我们注意到 这意味着所有以conf为结尾的文件都会被加载 在access_mod.conf中可以做如下配置,这样一来,除了本机,任何外部网站都可以访问admin.html; deny后面跟随的是本机地址 可以通过ip138查出对应的外网地址;也可以通过ifconfig查询网卡地址 allow deny http_access_module带来的问题:由于客户端可能通过代理(nginx代理 或7层负载均衡 亦或是内容分发网络访问目标地址,而这时,nginx所获取到的remote_addr可能是这些代理的地址),因此http_x

redis分布式加锁解锁

旧城冷巷雨未停 提交于 2021-01-08 18:29:54
public class RedisUtil { private static JedisPool jedisPool; private static final String LOCK_SUCCESS = "OK"; private static final String SET_IF_NOT_EXIST = "NX"; private static final String SET_WITH_EXPIRE_TIME = "PX"; private static final Long RELEASE_SUCCESS = 1L; public RedisUtil(JedisPoolConfig config) { if (jedisPool == null) { jedisPool = new JedisPool(config, "localhost", 6379, 2000); } } public RedisUtil(JedisPoolConfig config, String host, int port) { if (jedisPool == null) { jedisPool = new JedisPool(config, host, port, 2000); } } public RedisUtil(JedisPoolConfig config, String host

字节跳动着么缺人?不卡学历,不卡经验,只要求...

て烟熏妆下的殇ゞ 提交于 2021-01-06 21:19:58
由于国内用户对电商购物的热衷,再加上这些年,商家推出的各种优惠补贴策略和高效快捷的物流,也让大家足不出门享受到了真正的实惠。 但,对于一个 java 程序员 来讲,我更关注的是 系统架构层面 ,从原本的定时秒杀,到现在的各种 活动预热、拼团、定金膨胀、百亿补贴、跨店满减、以及更复杂的组合优惠 ,让用户一时摸不到头脑,虽然扰乱了用户购买的节奏,但也一直保持着持续升温的状态。 那么从 技术层面来分析 的话,这次优惠的复杂程度会造成原本就会有的 集中式秒杀 ,变成了 持续式高并发请求 ,这让我们的技术架构更为复杂,尤其是对 后台系统 而言, 复杂的链路调用 ,更多缓存逻辑和业务叠加给程序员们增加了额外的挑战。 当然像淘宝、京东、拼多多这种体量的用户群,在双十一之前早就做好了应对方案 对于在做 二三线电商 的小伙伴或想要了解淘宝、京东内部架构的小伙伴,我总结了以下几点技术总结: 技术总结: 电商高并发系统架构,SpringCloud Alibaba是如何应对双十一 抗住淘宝双十一的三大利器:Sentinel、Nacos、RocketMQ Sentinel在淘宝双十一洪峰时限流底层实现原理 Alibaba Sentinel对比 Netflix Hystrix区别与优势 Nacos在淘宝中如何抗住百万服务注册发现与配置下发 RocketMQ在双十一秒杀时如何抗住亿级订单数据

聊聊风口上的 eBPF

岁酱吖の 提交于 2021-01-06 11:01:42
eBPF 是一个用于访问 Linux 内核服务和硬件的新技术,由于其灵活性和高性能等特点,被迅速用于网络、出错、跟踪以及防火墙等多场景。目前国内已有少数企业开始尝试将 eBPF 引入生产实践,又拍云也是其中一个。专为技术开发者提供知识分享的 Open Talk 公开课邀请了又拍云开发工程师周晨约直播分享 eBPF 的学习经验与开发心得,并对其分享内容进行整理,下拉至文末点击阅读原文可回看原视频。 大家好,今天分享的主题是《eBPF 探索之旅》,围绕三部分展开: eBPF 是什么 eBPF 能做什么 如何编写 eBPF 程序 认识 eBPF eBPF 是什么,从字面上来看是扩展伯克利包处理器,那伯克利包处理器是什么呢? 在此之前先来了解一个性能优秀的常用抓包工具:tcpdump tcpdump 图中展示了两个常用指令 指令一:指定 IP 和端口,可以抓到 IP 为 220.173.103.227,端口为 80 的包 指令二:加上 grep,可以过滤出带有 route 字段的数据 那么 tcpdump 又是如何做到通过用户提供的规则处理网络上收到的包,再 copy 给用户的呢?如果放在用户层,就需要在系统里所有 socket 读写的时候做一层处理,把规则放上去,这样做难度太大。而 tcpdump 是基于 libpcap 库实现的,libpcap 能做到在驱动将包交给内核网络时

编写一个简单的游戏来练习用 C++ 编程

偶尔善良 提交于 2021-01-06 09:25:16
C++ 语言很复杂,但它可以教会你很多关于数据类型、内存管理和代码链接的知识。 学习一门编程语言有几种方法。如果你是编码新手,你通常会学习一些基本的计算机编码概念,并尝试应用它们。如果你已经知道如何用另一种语言进行编码,你可以重新学习编码概念在新语言中是如何表达的。 不管是哪种情况,学习这些新原理的便捷方法是创建一个简单的猜谜游戏。这会迫使你了解一门语言如何接收输入和发送输出,如何比较数据,如何控制程序的流程,以及如何利用条件来影响结果。它还确保你知道一门语言是如何组织其代码的;例如,Lua 或 Bash 可以很容易地作为脚本运行,而 Java 则需要你创建一个类。 在本文中,我将演示如何用 C++ 在终端上实现猜谜游戏。 安装依赖关系 要跟上本文的步伐,你需要 C++ 和一个编译器。 在 Linux 上,你可以通过从你的发行版软件仓库中安装 Qt Creator IDE 来获得你所需要的一切。 在 Fedora、CentOS 或 RHEL 上: $ sudo dnf install qt-creator 在 Debian、Ubuntu、Chromebook 或类似的系统上: $ sudo apt install qtcreator 本文并没有使用 Qt Creator IDE,但它是一个安装你所需要的一切的简单方法,对于复杂的 C++ 项目(包括那些带有 GUI 的项目)

没能力非要秀,非要自己撸,酿成重大生产事故!

邮差的信 提交于 2021-01-06 07:24:09
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/MVBvmy 推荐:https://www.xttblog.com/?p=5133 基于Redis使用分布式锁在当今已经不是什么新鲜事了。 本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。我们项目中的抢购订单采用的是分布式锁来解决的,有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了100瓶!要知道,这个地球上飞天茅台的稀缺性啊!!! 事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理。 好吧,冲~ # 事故现场 经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这次为什么会超卖呢? 原因在于:之前的抢购商品都不是什么稀缺性商品,而这次活动居然是飞天茅台,通过埋点数据分析,各项数据基本都是成倍增长,活动热烈程度可想而知!话不多说,直接上核心代码,机密部分做了伪代码处理。。。 public SeckillActivityRequestVO seckillHandle(SeckillActivityRequestVO request) { SeckillActivityRequestVO response; String

C++ 跨平台开发遇到的问题

旧城冷巷雨未停 提交于 2021-01-06 04:27:14
我们维护一个 C++ 编写的滤镜和特效库,可跨平台运行在 Windows、iOS、Android 上。Windows 上使用 Visual Studio 2013 或 2017 编译,iOS 是 Xcode 带的 clang,Android 使用 gcc。 抛开 iOS 和 Android 的平台差异,只从 C++ 语言来看,clang 和 gcc 的行为是很相似的,一个移动端编译运行没有问题,另一个就基本没有问题。但 VS 编译器的表现却很不同。此文对比 VS 编译器和 clang 编译器的一些差异,顺便记录我们踩过的坑。 1. 字符编码 在我的开发环境,clang 编码默认是 utf8, VS 是 GB2312(代码页是 936),它们都兼容 ASCII。 假如代码文件中只出现英文,两端都可编译。假如代码中出现中文,文件编码为 utf8, iOS 编译没有问题,VS 会出现编译错误 error C2001。假如设置编码为 utf16, VS 编译没有问题,而 iOS 会出现编译错误 encoding is not supported。因此假如代码有中文,需要将源文件编码修改为 Unicode(UTF8 带签名)- 代码页 65001。 参见 vs编译 error C2001: 常量中有换行符 中文无法通过编译 另外假如包含中文字符串,直接读取使用,程序运行起来很容易出现乱码

什么是分布式锁?Redis实现分布式锁详解

二次信任 提交于 2021-01-05 10:18:52
     在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?今天继续由陈睿|mikechen来继续分享Redis这个系列。   01.什么是分布式锁   要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。   1.线程锁   主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。   2.进程锁   为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。   3.分布式锁   当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。   02.分布式锁的要求   首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:   1、互斥性:任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。   2、安全性:锁只能被持有该锁的客户端删除,不能由其它客户端删除。   3、死锁:获取锁的客户端因为某些原因

Install resty.http with already installed openresty

若如初见. 提交于 2021-01-04 07:27:54
问题 I installed openresty-1.13.6.1 but it lacks 'resty.http' module. My openresty is installed in /usr/local/openresty and i need to integrate resty.http module with it. How to do it? 回答1: Just copy both files (https://github.com/pintsized/lua-resty-http/tree/master/lib/resty) into /usr/local/openresty/lualib folder. Update: Resulted file structure should be: /usr/local/openresty/lualib/resty/http.lua /usr/local/openresty/lualib/resty/http_headers.lua 来源: https://stackoverflow.com/questions