随笔分类 - 【 数据库 】
摘要:
提起Redis,经常会说其底层是一个单线程模型,这种说法并不是很严谨。Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程的地方仍会使用了多个线程。既然是单线程模型,那么CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。 Re
阅读全文

摘要:
1、实时重建索引 在实际的生产环境中,一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中。 批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来rei
阅读全文

摘要:
许多有RDBMS/SQL背景的开发者,在初次踏入ElasticSearch世界的时候,很容易就想到使用通配符(Wildcard Query)来实现模糊查询,因为这是和SQL里like操作最相似的查询方式,用起来感觉非常舒适。不过,滥用Wildcard query可能带来灾难性的后果。 问题复现 创建
阅读全文

摘要:
应用背景 数据量过大,索引分片数量不足,导致数据入库较慢的情况,需要扩大分片的数量。 数据的mapping需要修改,但是大量的数据已经导入到索引中了,重新导入数据到新的索引太耗时;但是在ES中,一个字段的mapping在定义并且导入数据之后是不能再修改的。 上述情况下需要重建索引进行数据迁移,ES提
阅读全文

摘要:
需求: 通过指定点搜索附近的人 , 要求可以过滤年龄, 结果按照距离进行排序, 并且展示她/他距离你多远 设计: ES提供了很多地理位置的搜索方式 : geo_bounding_box: 找出落在指定矩形框中的点。 geo_distance: 找出与指定位置在给定距离内的点。 geo_distanc
阅读全文

摘要:
本文基于微信步数排行榜介绍如何使用Redis的ZSET实现排行榜,重点是Redis的ZSET的使用,因此只是分析了微信步数排行榜的大致实现思路,实际实现肯定比文中分析的复杂的多。首先,我们来分析下微信步数排行榜的需求: 排行榜是以日期为单位的,历史日期的排行榜是可以查看的 排行榜可能并不会显示所有好
阅读全文

摘要:
接触到的一些数据搜索项目,涉及到请求模拟,基于反爬需要使用随机的User Agent,于是使用Redis实现了一个十分简易的UA池。 背景 最近的一个需求,有模拟请求的逻辑,要求每次请求的请求头中的User Agent要满足下面几点: 每次获取的User Agent是随机的。 每次获取的User A
阅读全文

摘要:
RESP简介 Redis客户端与Redis服务端基于一个称作RESP的协议进行通信,RESP全称为Redis Serialization Protocol,也就是Redis序列化协议。虽然RESP为Redis设计,但是它也可以应用在其他客户端-服务端(Client-Server)的软件项目中。RES
阅读全文

摘要:
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。 开启redis key过期
阅读全文

摘要:
Redisson是具备多种内存数据网格特性的基于Java编写的Redis客户端框架(Redis Java Client with features of In-Memory Data Grid),基于Redis的基本数据类型扩展出很多种实现的高级数据结构,具体见其官方的简介图。本文要分析的R(ed)
阅读全文

摘要:
索引的本质 在没有索引的情况下,查找数据只能按照从头到尾的顺序逐行查找,每查找一行数据,意味着我们要到到磁盘相应的位置去读取一条数据。如果把查询一条数据分为到磁盘中查询和比对查询条件两步的话,到磁盘中查询的时间会远远大于比对查询条件的时间,这意味着在一次查询中,磁盘io占用了大部分的时间。更进一步地
阅读全文

摘要:
在实际项目中对于数据库的安全是重中之重,为防万一我们需要做好备份工作。备份分为全量备份和增量备份,今天我们就来实践下备份和还原操作。 一、为什么需要备份 在生产环境中数据库可能会遭遇到各种各样的不测从而导致数据丢失, 大致上可以分为以下几种: 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最
阅读全文

摘要:
一、简介 Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。Redis有5种基础数据结构,分别是: string(字符串) list(列表) hash(字典) set(集合) zset(有序集合) 其中list、set、hash、zset这四种数据结构是容器型数据
阅读全文

摘要:
为什么需要分布式锁? 在开始讲分布式锁之前,有必要简单介绍一下,为什么需要分布式锁? 与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。 如果换做是多个进程,需要同时操作一个
阅读全文

摘要:
es是一个分布式的存储和检索系统,在存储的时候默认是根据每条记录的_id字段做路由分发的,这意味着es服务端是准确知道每个document分布在那个shard上的。 相对比于CURD上操作,search一个比较复杂的执行模式,因为我们不知道那些document会被匹配到,任何一个shard上都有可能
阅读全文

摘要:
Redis几种架构 Redis发展到现在,几种常见的部署架构有: 单机模式; 主从模式; 哨兵模式; 集群模式; 我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普通分布式锁是如何实现的,才能更好的了解Redlock分布式锁的实现,因为Redlock分布式锁的实现
阅读全文

摘要:
准备三张表,一张角色表,一张装备表,一张基础数据表。 角色表: CREATE TABLE `role` ( `n_role_id` int DEFAULT NULL, `s_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DE
阅读全文

摘要:
通常情况下,MySQL基本在InnoDB引擎下使用, 故相关描述均以InnoDB引擎为背景。使用的表结构和数据 CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `abc` int(11) DEFAULT NULL, `xyz`
阅读全文

摘要:
锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中,不同存储引擎使用不同的加锁方式;以 InnoDB 存储引擎为例探讨 MySQL 中的锁机制,其他存储引擎中的锁相对简单一些。 锁的分类 表级锁与行级锁 MySQL 中的锁可以按照粒度分为锁定整个表的表级锁(
阅读全文

摘要:
本文主要讨论MySQL索引的部分知识,将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开。 一、MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么是索引,分析索引的几种类型,并探讨一下如何创建索引以及索引设计的基本原则。 此部分用于测试索引创建的
阅读全文
