Redis

看完后,我才明白Redis为什么默认16个数据库?

两盒软妹~` 提交于 2020-11-06 15:33:24
www.toutiao.com/a6752317753866060299 导读:在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。 一、16个数据库的由来 Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。 以MySQL实例为例 Redis默认支持16个数据库,可以通过调整Redis的配置文件redis/redis.conf中的databases来修改这一个值,设置完毕后重启Redis便完成配置。 客户端与Redis建立连接后会默认选择0号数据库,不过可以随时使用SELECT命令更换数据库。 在实际项目中则可以通过以Redis配置文件的形式指定数据库,如下图所示 二、正确理解Redis的“数据库”概念 由于Redis不支持自定义数据库的名字,所以每个数据库都以编号命名。开发者则需要自己记录存储的数据与数据库的对应关系。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么全部数据库都没有权限访问。但是,要正确地理解Redis的

好不容易调休一天,全花在Redis集群实战和研究原理上了

☆樱花仙子☆ 提交于 2020-11-06 14:04:36
Redis集群搭建实战:3主 3从 模式 0、准备工作 A、在虚拟机上准备三台CentOS 7系统,IP分别为172.22.13.77,172.22.13.78,172.22.13.79(不清楚的,可以参考另外一个博文 “搭建VMware和CentOS”) B、下载、安装redis5.x版本 1、创建目录(以172.22.13.77这台服务器为例) 在/usr/local下创建redis/redis-cluster两个目录,并在redis-cluster目录下建两个以端口命名的目录8001和8004 2、拷贝配置文件 将安装redis时最原始的配置文件redis.conf分别拷贝到8001和8004两个目录下 3、修改配置文件 8001和8004两个目录下的配置文件修改如下配置 (1)daemonize yes (在后台运行redis) (2)port 8001(分别对每个机器的端口号进行设置) (3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据),这个目录必须要先建好 (4)cluster-enabled yes(启动集群模式) (5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上) (6)cluster-node

利用Zookeeper实现

与世无争的帅哥 提交于 2020-11-06 13:56:46
许多场景中, 数据一致性 是一个比较重要的话题,在单机环境中,我们可以通过Java提供的 并发API 来解决;而在分布式环境(会遇到网络故障、消息重复、消息丢失等各种问题)下要复杂得多,常见的解决方案是 分布式事务 、 分布式锁 等。 本文主要探讨如何利用Zookeeper来实现分布式锁。 关于分布式锁 分布式锁是控制分布式系统之间 同步访问共享资源 的一种方式。 在 实现 分布式锁的过程中需要注意的: 锁的可重入性(递归调用不应该被阻塞、避免死锁) 锁的超时(避免死锁、死循环等意外情况) 锁的阻塞(保证原子性等) 锁的特性支持(阻塞锁、可重入锁、公平锁、联锁、信号量、读写锁) 在 使用 分布式锁时需要注意: 分布式锁的开销(分布式锁一般能不用就不用,有些场景可以用乐观锁代替) 加锁的粒度(控制加锁的粒度,可以优化系统的性能) 加锁的方式 以下是几种常见的实现分布式锁的方案及其优缺点。 基于数据库 1. 基于数据库表 最简单的方式可能就是直接创建一张锁表,当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。给某字段添加唯一性约束,如果有多个请求同时提交到数据库的话, 数据库会保证只有一个操作可以成功 ,那么我们就可以认为操作成功的那个线程获得了该方法的锁,可以执行方法体内容。 会引入数据库单点、无失效时间、不阻塞、不可重入等问题。 2.

Docker容器日志管理最佳实践

僤鯓⒐⒋嵵緔 提交于 2020-11-06 08:56:22
来自: 自由早晚乱余生 链接:https://www.cnblogs.com/operationhome/p/10907591.html Docker-CE Server Version : 18 .09.6 Storage Driver : overlay2 Kernel Version : 3 .10.0-862.el7.x86_64 Operating System : CentOS Linux 7 ( Core ) Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志。 一 、Docker 引擎日志 Docker 引擎日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般位于 /var/log/upstart/docker.log 下,后者我们一般 通过 journalctl -u docker 来进行查看。 系统 日志位置 Ubuntu(14.04) /var/log/upstart/docker.log Ubuntu(16.04) journalctl -u docker.service CentOS 7/RHEL 7/Fedora journalctl -u docker.service CoreOS

一口气说出 6种 延时队列的实现方法,面试官也得服

☆樱花仙子☆ 提交于 2020-11-06 08:50:51
五一期间原计划是写两篇文章,看一本技术类书籍,结果这五天由于自律性过于差,禁不住各种诱惑,我连电脑都没打开过,计划完美宣告失败。所以在这能看出和大佬之间的差距,人家没白没夜的更文,比你优秀的人比你更努力,难以望其项背,真是让我自愧不如。 知耻而后勇,这不逼着自己又学起来了,个人比较喜欢一些实践类的东西,既学习到知识又能让技术落地,能搞出个 demo 最好,本来不知道该分享什么主题,好在最近项目紧急招人中,而我有幸做了回面试官,就给大家整理分享一道面试题:“ 如何实现延时队列? ”。 下边会介绍多种实现延时队列的思路,文末提供有几种实现方式的 github 地址。其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。 一、延时队列的应用 什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的,尤其像电商类平台: 1、订单成功后,在30分钟内没有支付,自动取消订单 2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。 3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存 4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等 。。。。 上边的这些场景都可以应用延时队列解决。 二、延时队列的实现

使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期

本秂侑毒 提交于 2020-11-06 07:57:32
面试问题 Redis 如何实现查询附近的人? 涉及知识点 Redis 中如何操作位置信息? GEO 底层是如何实现的? 如何在程序实现查询附近的人? 在实际使用中需要注意哪些问题? 视频答案 视频地址: https://www.bilibili.com/video/av89369236/ 图文答案 Redis 中要实现查询附近的人,需要使用 Redis 3.2 版本中提供的 GEO 数据类型,它包含以下几个重要的方法: GEOADD 添加元素位置信息; GEOPOS 查询元素经纬度信息; GEODIST 查询两个元素的直线距离; GEORADIUS 查询附近一定距离内的元素信息。 首先我们可以使用百度提供的经纬度查询工具来确定位置信息,地址:我们先用百度地图提供的经纬度查询工具,地址: http://api.map.baidu.com/lbsapi/getpoint/index.html 命令使用详见视频部分。 代码实战 下面我们用 Java 代码,来实现查询附近的人,完整代码如下: import redis.clients.jedis.GeoCoordinate; import redis.clients.jedis.GeoRadiusResponse; import redis.clients.jedis.GeoUnit; import redis.clients.jedis

JAVA架构师成长之路

半城伤御伤魂 提交于 2020-11-06 05:45:03
不努力,和咸鱼有什么区别!!! gpvip性能调优之mysql https://pan.baidu.com/s/145fjs1BFswp4fFIvRDvlQA vip 享学课堂vip之mysql https://pan.baidu.com/s/1r0N1oFghU--bCbm9rse4aw mysql系列精品VIP视频 https://pan.baidu.com/s/1Y9pzr29ByR8m9FnXao3Y8w Mysql从入门到精通系列视频 https://pan.baidu.com/s/1uUCE2egHvfCYCY_Zrya-Vw gpvip性能调优之tomcat https://pan.baidu.com/s/1vpHmyWkOVZB9_JbvI-rB2w ◆◆ gpvip之activeMQ ◆◆ https://pan.baidu.com/s/1RFkx8CqdkWQS-P_vRoNqIA gpvip之docker从入门到精通 https://pan.baidu.com/s/1af8d7BDttvYKdYMIt3jbNw vip课程之docker https://pan.baidu.com/s/1hfFclD6E_b_P-5ERSzBXlg 架构师成长之路之带你走进Docker的世界 https://pan.baidu.com/s/1oT7ZM

HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期

╄→尐↘猪︶ㄣ 提交于 2020-11-06 04:47:17
无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行。 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今天来开始第 6 期的内容。 本期的问题是:HashMap 为什会导致 CPU 运行 100%?这是一个比较常见的经典问题了,但是有很多人读者朋友给我反馈,尼玛,看文章根本看不懂啊?Sun 公司都不知道这个问题的原因吧?不,是 Oracle 公司都不知道这个问题的原因吧?面试官怕也不知道这个的答案吧? 咳咳,作为一个很正经的面试官,我觉得这个问题一点都不重要,重要的是你不知道答案啊。好的,下一位面试者请进,您先回去等通知吧。 为了避免这种尴尬的事情发生,今天我们来好好聊一下这个问题,毕竟技能再手,才能吊打面试官不是? 正文 这个问题相关的知识点,有以下几个: HashMap 的底层数据结构是什么? 什么是哈希碰撞?如何该解决这个问题? 什么是扩展因子?它有什么用? 还有对 HashMap 源码的理解,为什么 HashMap 会导致死循环? 视频版答案 视频内容如下: 图文答案 1.HashMap 的底层数据结构 先来说 HashMap 的底层数据结构,看过 HashMap 的源码我们就会发现,JDK 1.7 和 JDK 1.8 HashMap 的组成是不同的,JDK 1.7

《进大厂系列》系列-秒杀系统设计

时间秒杀一切 提交于 2020-11-05 15:21:26
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub 上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 絮叨 之前写了很多 Redis 相关的知识点,我又大概回头看了下,除了比较底层的东西没写很深之外,我基本上的点都提到过了,我相信如果只是为了应付面试应该是够了的,但是如果你想把它们真正的吸收纳为己用,还是需要 大量的知识积累 ,和 很多实际操作 的。 就我自己而言 Redis 在开发过程中实在用得太普遍了,热点数据的存储啊,整体性能的提升啊都会用到,但是就像我说的 技术就是一把双刃剑 ,使用它们随之而来的问题也会很多的,我在老东家双十二就遇到 缓存雪崩 问题让整体服务宕机3分钟,相必大家都知道阿里今年的双十一数据了,那三分钟在这种时候到底值多少钱?真的不敢想象。 Redis 的普遍我就拿掘金我自己的认知举例,不知道对不对,但是目测是对的。 大家看到问题所在了么? 是的热门的赞的数据不是最新的,我盲猜一波上面的热门文章是缓存。失效时间应该是几十分钟的,为啥这么做呢? 热门文章是大家共同都会看到的,也就是 热点数据 ,在那做缓存,他是不需要那么高的 实时性 的,那下面的文章列表是最新发布的文章,有高实时性的特点,大家访问多的放在缓存还可以给DB减少压力,我也不知道掘金是不是这么做的哈

300万运算/秒 :VoltDB在电信行业基准测试上可线性扩展性能

拥有回忆 提交于 2020-11-05 08:59:02
01 总 体 概 述 VoltDB受到全球电信软件解决方案提供商的信赖,后者将其作为首选内存数据库来驱动他们部署在全球100多家运营商处的任务关键型应用。VoltDB受到青睐的原因在于其性能和功能不仅能够解决当前挑战,而且还能支持业内各种系统的快速发展。 我们的下述基准测试展示了VoltDB的性能如何满足或超越电信系统的要求,展示了 VoltDB具备的驱动诸如5G 之类的行业革命所需要的高性能、低延迟和线性扩展。 在这个基准测试中,我们在云中测试了VoltDB v8.3,然后观察到了可以随服务器数量线性扩展的性能以及超过300万次运算/秒的速度,并且自始至终只有个位数的延迟。 1.VoltDB和5G发展 5G的出现给电信软件解决方案提供商带来了一些重要挑战。除了新的硬件标准,这种网络进化也需要OSS和BSS的支持IT功能发生转变。通过新服务创建创造额外收入的机会要求OSS和BSS功能具有灵活性和可扩展性, 以便在不断增加的负载下实现新的用例。 这种对系统的要求提升了支持数据库的重要性,其功能不再是简单地存储数据,而是充当一个活跃的实时决策系统。 简而言之,VoltDB是一个电信级数据库,它完全满足主动实时决策系统的要求,例如支持 5G 可能所需要的系统。VoltDB是一个内存关系数据库,具有极其重要和毫不折衷的可扩展性、可编程性和一致性。基于VoltDB构建的应用,无论是在电信