- 博客(15)
- 收藏
- 关注
原创 ZooKeeper 安装+启动
下载安装https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gztar zxvf apache-zookeeper-3.6.2-bin.tar.gz -C ./启动1. 需要要配置JAVA_HOME2. 把 zookeeper 加到 PATH 中3.需要一个配置文件,在 conf / zoo.cfg 配置:tickTime=2000da.
2021-03-20 10:29:58 107
原创 MongoDB CRUD操作(2)
批量写入操作db.collection.bulkWrite()方法提供了执行批量插入,更新和删除操作的能力。批量写操作可以是有序的,如果在某个单独的写操作的处理过程中发生错误,MongoDB将直接返回而不再继续处理列表中任何剩余的写操作。默认有序。db.characters.bulkWrite([...], {ordered: true});也可以无序的,如果某个单独的写操作的处理过程中发生错误,MongoDB将继续处理列表中剩余的写操作。db.characters.bulkWr.
2021-03-18 21:00:36 150
原创 MongoDB CRUD操作(1)
创建操作1. 插入单个文档db.collection.insertOne(<document>) 将单个文档插入集合中。如果文档未指定_id字段,则MongoDB将具有ObjectId值的_id字段添加到新文档中。2. 插入多个文档db.collection.insertMany( [<document>, ... ] )可以将多个文档插入一个集合中。 将文档数组传递给该方法。如果文档未指定_id字段,则MongoDB向每个文档添加带有ObjectId值的_id字段.
2021-03-14 15:22:16 265
原创 MongoDB 安装使用
准备 MongoDB安装系统:Ubuntu 20.04Mongodb 版本:4.4wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -echo "deb https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sou.
2021-03-11 20:46:32 84
原创 Redis 主从复制
主从复制1. 三种主要机制工作:当主服务器和副本实例连接良好时,主服务器通过向副本发送命令流来使副本保持更新,以便复制由于以下原因而在主服务器上发生的数据集影响:客户端写入,密钥已过期或驱逐任何其他更改主数据集的操作。 当主服务器和副本服务器之间的链接中断时,由于网络问题或由于在主服务器或副本服务器中检测到超时,副本服务器将重新连接并尝试进行部分重新同步:这意味着它将尝试仅获取该部件断开期间错过的命令流的大小。 如果无法进行部分重新同步,则副本将要求完全重新同步。这将涉及一个更复杂的过程,在该过
2021-03-07 19:20:25 97
原创 Redis 分布式锁
Redis 分布式锁特性:互斥。在任何给定时刻,只有一个客户端可以持有锁。 无死锁。最终,即使锁定资源的客户端崩溃或分区,也始终可以获得锁定。 容错能力。只要大多数Redis节点都处于运行状态,客户端就可以获取和释放锁。单例 Redis 分布式锁获取锁使用以下方法: SET resource_name my_random_value NX PX 30000该命令仅在密钥不存在时才设置密钥(NX选项),并且到期时间为30000毫秒(PX选项)。密钥设置为随机值。该值在所有客户.
2021-03-07 10:35:49 501
原创 Redis 集群
Redis ClusterRedis Cluster 提供了一种 Redis 安装的方法,数据会在多个Redis节点之间自动分区。Redis Cluster在分区期间还提供了一定程度的可用性。这实际上就是在某些节点出现故障或无法通信时继续操作的能力。但是,如果发生较大故障(例如,大多数节点不可用时),集群将停止运行。Redis Cluster TCP 端口每个Redis集群节点都需要打开两个TCP连接。一个用于服务客户端的常规Redis TCP端口,例如6379,另一个为在数据端口上加上10
2021-02-28 13:50:45 285
原创 Redis 分区
TM的终于到集群了......对Redis进行分区有两个主要目标:它允许使用许多计算机的内存总和来创建更大的数据库。如果不进行分区,则只能使用一台计算机可以支持的内存量。 它允许将计算能力扩展到多核和多台计算机,并将网络带宽扩展到多台计算机和网络适配器。分区方式假设有四个Redis的情况下R0,R1,R2,R3,和代表用户的 user:0, user:1, user2 ...。执行分区的最简单方法之一是范围分区,它是通过将对象范围映射到特定的Redis实例中来完成的。例如,我可以说从ID
2021-02-25 22:23:57 89
原创 Redis 事务
1. 事务中的所有命令都被序列化并顺序执行。在Redis事务的执行过程中,永远不会发生另一个客户端发出的请求。这样可以确保将命令作为单个隔离操作执行。2. 所有命令都将被处理,或者不处理任何命令,因此Redis事务也是原子的。用法MULTI 标记事务开始EXEC 开始按顺序执行事务里的命令DISCARD 刷新事务命令队列,取消当前事务> MULTIOK> INCR fooQUEUED> INCR barQUEUED> EXEC1) (integ
2021-02-21 22:12:57 75
原创 Redis 缓存淘汰策略
当 Redis 被当作缓存使用时,也支持 LRU 或者 LFU算法。Redis 的maxmemory指令用于将可用内存限制在固定大小内。当缓存大小达到内存最大值时,Redis会根据所设置的淘汰策略选择不同的行为。maxmemory100mb淘汰策略(在Redis术语中,通常将具有相关超时的键称为可变键)noeviction:在达到内存限制并且客户端尝试执行可能导致使用更多内存的命令时返回错误。 allkeys-lru:尝试先删除最近最少使用的(LRU)键。 volatile...
2021-02-11 17:23:40 180 1
原创 LFU (最不经常使用算法)缓存
目标LFU 算法是通过存储每个缓存使用的频率,在缓存容量满了之后,删除使用频率最少的缓存来给新的缓存留出空间。如果多个缓存节点都拥有最少使用频率,则删除最久未使用的节点。思路我们会使用到两个 HashMap 以及一个HashLinkedList。链表中的 Node 需要存储 key, value, frequency。一个 HashMap (frequencyTable)存储键值 frequency -> 链表, 另一个(cacheTable)存储键值 key -> Node
2021-02-07 21:38:29 1521 3
原创 LRU (最近最少使用算法) 缓存
目标1. 该缓存通过构造参数限制最大缓存数量 capacity,当缓存容量 size 达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。2. GET 以及 PUT 操作都满足时间复杂度O(1)。思路为了知道最不经常使用缓存数据是哪个,我们可以用链表来存储,接近头部的是最近刚使用的,接近尾部的是最不经常使用的。该缓存还要删除最近不经常使用的节点,需要使用双向链表更方便。GET 以及 PUT 都要满足时间复杂度O(1),唯一可以想到的就是HashMap了。
2021-02-07 11:02:55 1024 2
原创 Redis Expire 设置过期时间
Redis Expire命令EXPIRE key seconds设置key的过期时间,超过时间后,将会自动删除该key。如果设置的过期时间时负数,则会直接删除目标key。返回值:1 设置完成,0 key不存在如何清除过期时间:只有删除或覆盖键内容的命令(包括DEL,SET,GETSET和所有*STORE 命令)才能清除过期时间。这意味着所有在概念上更改存储在键上的值而不用新键替换的操作都将保持过期时间不变。举例来说,增加一键的值INCR,推新值的列表,包括LPUSH,或改变了...
2021-02-04 22:23:24 1648
原创 Redis Pipelining - 管道
简介Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。 服务端处理命令,并将结果返回给客户端。客户端将请求发送到服务端,服务端处理请求后返回响应给客户端,这两个阶段所经过的时间叫RTT (Round trip time)往返时间。如果RTT时间为250毫秒(在Internet上的链接非常慢的情况下),即使服务器每秒能够处理10万个请求,我们每
2021-02-04 20:09:27 152
原创 Redis 基础
简介Redis 是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可持久性的键值对存储数据库。特点:基于内存运行,性能高效 单进程单线程模型 丰富的数据类型 持久化 操作具有原子性 支持分布式,高并发读写 支持lua脚本配置1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no2. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为...
2021-02-03 20:58:05 151 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人