前言和官方文档前言:MongoDB中涉及到数组字段的查询和更新很常用,抽空把自己开发工作中常遇到的场景拿出来并结合官方文档小结一下。有说的不对的地方,欢迎指出交流探讨,也希望这篇笔记能够帮到你。 可以转载,但请注明出处。 之前自己写的SpringBoot整合MongoDB的聚合查询操作,感兴趣的可以点击查阅。https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 官方文档:$elemMatch: https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/
Redis主从复制主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,主从复制节点间数据是全量的。作用:读写分离,性能扩展容灾快速恢复上图将主服务器复制了3份从服务器,主服务器进行写操作,从服务器进行读操作,读写分离,减少压力 复制原理Slave启动成功连接到master后会发送一个sync命令;Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。全量复制:slave服务器在接收到数据库文件数据后,将其存盘并加载
前言Redis提供了2个不同形式的持久化方式:RDB(RedisDataBase)AOF(AppendOfFile) RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 备份是如何执行的Redis会单独创建(fork)一个子进程来进行持久化,首先会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后
缓存过期策略定时删除没人用含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除优点:该策略可以立即清除过期的数据,保证内存被尽快释放缺点:若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重惰性删除内置策略含义:key过期的时候不删除,只有当访问这个key的时候才去判断缓存是不是过期,若过期,则删除,返回null。优点:删除操作只发生在从
1.问题: 最近客服有报无法上报运动记录,通过日志查看是分布式锁等待超时所致。 redis出现一个分布式锁的TTL为-1,正常情况都会设置超时时间的。 2.分析:通过k8s发现sport服务在50几天内重启了40几次,机器上内存比较紧缺,暂时只能重启,占用内存高的问题也先不解决。看下之前加锁的代码:acquire_lock defacquire_lock(redis_client,lock_key,lock_value,expire=10,timeout=5):"""获取锁:paramredis_client:redis;连接:paramlock_key:lockkey:paramlo
Redis事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队。 Multi、Exec、discardRedis事务中有Multi、Exec和discard三个指令,在Redis中,从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。而组队的过程中可以通过discard来放弃组队 案列说明组队成功:我们输入multi进行组队,将setk1v1和setk2v2两条
前言Redis中有5大数据类型,分别是字符串String、列表List、集合Set、哈希Hash、有序集合Zset,本篇介绍Redis的字符串String Redis字符串String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个valueString类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化对象。Stirng类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M 常用命令set添加键值对*EX:key的超时秒数*PX:key的超时毫秒数,与EX互斥*NX:当数据库中k
前言redis安装在Linux服务器上,系统为centos7,安装的版本为redis6.2.10 下载与安装下载地址:https://redis.io/download/#redis-downloads点击上面的链接就能进入redis下载页面,最新的目前是7.0这里使用的是6.2.10的版本,所以点击上图的Moreinstallationoptions,跳转到如下页面可以看到这里有docker的方式,虽然方便简单,但是这里还是推荐学习下源安装这里我们选择6.2.10这个版本,点击右键,选择复制链接地址,地址如下:https://download.redis.io/releases/redis-
本文主要描述reids数据结构和底层数据结构的实现,用于熟悉redis的底层数据结构实现原理,下图是reids的整个数据结构组成。这篇文章主要介绍value对象这部分数据结构 SDS初识string结构对应底层SDS数据结构,SDS是redis最简单的数据结构,一般用于分布式锁和Json序列化对象存储。SDS命令:设置SDS的值 set:SETNAMEXIAOMING获取SDS值 get:GETNAME计数 incr:INCRNUM设置SDS过期时间 expire:EXPIRENAME100查看SDS过期剩余时间 ttl:TTLNAME C语言字符串的问题C语言中以”/0“识别字符串的结尾,r
MongoDBvsElasticsearchMongoDBElasticSearch备注定位(文档型)数据库(文档型)搜索引擎一个管理数据,一个检索数据资源占用一般高mongo使用c++,es使用Java开发写入延迟低高es的写入延迟默认1s,可配置,但是要牺牲一些东西全文索引支持度一般非常好es本来就是搜索引擎,这个没啥可比性有无Schema无无两者都是无Schema支持的数据量PB+TB+~PB两者支持的量并不好说的太死,都支持分片和横向扩展,但是相对来说MongoDB的数据量支持要更大一点性能非常好好MongoDB在大部分场景性能比es强的多得多索引结构B树LSM树es追求写入吞吐量,M