大家好,我是大D。
不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别。
其实,列式存储并不是一项新技术,最早可以追溯到 1983 年的论文 Cantor。然而,受限于早期的硬件条件和应用场景,传统的事务型
SpringDataRedis的序列化的一些问题
RedisTemplate可以接收任意Object作为值写入Redis,但是如果不实现设置序列化器的化默认是采用JDK序列化,序列化后的结果可读性差并且内存占用空间大,如下图。
自定义RedisTemplate的序列化方式
key和 hashKe
概述
MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的。
MongoDB 支持的数据结构非常松散,类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是支持的查询语言非常强大,语法类似于面向
集群故障转移
节点下线
在集群定时任务clusterCron中,会遍历集群中的节点,对每个节点进行检查,判断节点是否下线。与节点下线相关的状态有两个,分别为CLUSTER_NODE_PFAIL和CLUSTER_NODE_FAIL。
CLUSTER_NODE_PFAIL:当前节点认为某个节点下线时,
aeEventLoop初始化
在server.c文件的initServer函数中,对aeEventLoop进行了初始化:
调用aeCreateEventLoop函数创建aeEventLoop结构体,对aeEventLoop结构体中的变量进行了初始化,之后调用了aeApiCreate函数创建epol
epoll用法
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。
epoll函数
1. 创建epoll的句柄
size表示此内核监听的数目一共有多大,当创建好epoll句柄后,它就是会占用一个fd值,在
原创不易,求分享、求一键三连
会议是工作中最重要的组成部分,因为他需要解决两个核心难题:
信息传递;
达成一致;
有效的信息传递是战略落地的前提条件,更多的认知统一更是可以加速成功的发生。但无论是信息传递还是达成一致,都不是一件简单的事情,特别是会议中人多嘴杂,更是加大了这种难度。
所以,如何
Redis 的 Java 客户端
Jedis
优点:以 Redis 命令作为方法名称,学习成本低廉,简单且实用
缺点:Jedis 的实例是线程不安全的,在多线程的环境下需要基于线程池来使用
lettuce(spring 官方默认)
基于 Netty 实现的,支持同步、异步和响应式编程方式,并且是
SQL vs NoSQL
结构化
SQL 是结构化的,一旦定义了表结构,以后在维护数据的时候必须严格遵守定义的结构。
NoSQL 是非结构化的,常见的形式有 Redis 的 Key-Value 存储形式、Document 文档型存储形式、Graph 图类型存储形式
关联的
SQL 数据库可
原创不易,求分享、求一键三连
之前有个同学问我技术部的绩效方案怎么设计,想着这么多年的考核与被考核,我陷入了沉思,一方面是我对考核的认识未必正确、全面,另一方面是有些同学未必能接受这种说法,但教学相长不是坏事,所以还是聊聊对绩效考核的看法吧。
首先,你要清楚绩效考核是属于什么模块,在顶层设计中
Redis常见使用场景
缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、时间线 Timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.
1.缓存
String类型
例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页
缓存穿透,缓存雪崩,缓存击穿
本文整理自黑马程序员相关资料
缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都部存在,这样缓存永远不会生效。因此这些请求都会穿过缓存,最终请求到数据库上,对数据库造成非常大的压力。
常见的解决方案有两种:
缓存空对象:当缓存和数据库都没有请求的数据时,
Redis缓存更新策略
本文整理自黑马程序员相关资料
内存淘汰
超时剔除
主动更新
说明
不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存
给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存
编写业务逻辑,在修改数据的同时,更新缓存
分布式锁
本文整理自黑马程序员相关资料
问题的引入
在平时单服务的情况下,我们使用互斥锁可以保证同一时刻只有一个线程执行自己的业务。原理是,在JVM内部维护了一个锁监视器,锁监视器保证了同一时刻只有一个线程获取到锁。但是如果开启了多个服务,就会有多个JVM,从而有多个不同的锁监视器,每个锁监视
我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。
这段时间有几个技术小伙伴问了我一个有意思的问题:“你的前端脚本是怎么加密的?”
我决定写帖子来分享这个问题的答案。
在线客服系统访客端:
在线客服系统客服端:
免
作为一项古老的智力游戏,千百年来迷宫都散发着迷人的魅力。但是,手工设计迷宫费时又耗(脑)力,于是,我们有必要制作一个程序:迷宫生成器……
好吧,我编不下去了。但是,从上面的文字中,我们可以看出,我们此次的主题是:用Python实现一个迷宫生成器。
首先展示一下效果图:
我们先分析一下所需的库:
1. 简介
上一篇我们聊到了mongodb数据块的基本概念,和数据块迁移的主要流程,这篇文章我们聊聊源码实现部分。
2. 迁移序列图
数据块迁移的请求是从配置服务器(config server)发给(donor,捐献方),再有捐献方发起迁移请求给目标节点(recipient,接收方),后续迁移由捐
Redis
因为没有指定配置文件
需配置
redis-server redis.windows.conf
之后自动启动
测试性能
redis-benchmark -p 6379 -c 100 -n 10000
基础概念:
清空当前数据库:flushdb
清空全部数据库:flushall
先上命令速查网站,菜鸟yydshttps://www.runoob.com/redis/redis-strings.html
操作redis的包是go-redis/redis
官方文档 https://redis.uptrace.dev/guide/
github https://github.c
1. 获取指定前缀的key
需求描述:
Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key
解决方案:
redis自带的scan命令可以解决这个问题
2. SCAN命令
SCAN是一个基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返