Redis的内存上限和内存回收策略

上一篇文章讲到了Redis的内存分配和简单的Redis内存查看,今天这篇文章带来Redis的内存上限管理和Redis的内存回收策略。 内存上限 Redis可以通过 maxmemory 参数来限制最大可用内存,主要为了避免Redis内存超过操作系统内存,从而导致服务器响应变慢甚至死机的情况。...

2018-09-10 22:56:10

阅读数 833

评论数 1

Redis 的内存分配

我们都知道Redis是基于内存的一个数据库,那么Redis是怎么管理内存的呢?今天这篇文章主要分享一下Redis的内存分配和简单的查看Redis内存使用情况。 内存分配 Redis进程的内存消耗主要包括:自身内存 + 对象内存 + 缓冲内存 + 内存碎片。 1 自身内存 Redis...

2018-09-10 22:55:23

阅读数 677

评论数 0

Redis GEO的使用

Redis 3.2提供了GEO功能,支持存储地理位置信息用来实现类似微信中附近的人的功能,使用起来十分方便。 下面简单介绍一下Redis中几个和GEO相关的命令 1.添加地理位置 geoadd key long lat member [longitude latitude membe...

2018-09-07 11:12:37

阅读数 421

评论数 0

Redis HyperLogLog 用于记录独立总数

HyperLogLog是Redis支持的一种数据结构,使用基数算法来完成独立总数的统计。这里先来介绍一下基数算法。 基数是指一个集合中,不同的数的个数。基数算法是估计一个集合中不同的数的个数,不是数据总量的估计,也不是基数的精确计算。而是用概率算法的思想,来用低空间和时间成本,以一个很低的误差度...

2018-09-06 09:57:53

阅读数 173

评论数 0

Redis Bitmaps的使用

Bitmaps是Redis支持的一种数据结构,value是一个长字符串,字符串上每一个字符的值只能是 0 或 1。看起来像是一个二进制的数据结构,其实只是一个字符串,所以严格来说Bitmaps并不是一个新的数据结构,而是一个符合特殊约定的字符串。 下面先来看一下Redis中和Bitmaps相关的...

2018-09-06 09:56:51

阅读数 166

评论数 0

Redis Lua脚本的使用,自定义命令解决分布式锁的抢占

一、Lua 的介绍 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入到应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 的特性 - 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。 - ...

2018-09-04 13:31:37

阅读数 216

评论数 0

Redis的事务机制

昨天介绍了Redis Pipeline,Pipeline能帮我们组装命令一次发送给Redis,但是Pipeline中的命令不具有原子性,所以如果我们需要自己组装一个原子性的操作,使用Pipeline是无法实现的,庆幸的是Redis提供了事物和支持Lua脚本来实现原子性操作。 今天我们来了解一下R...

2018-09-03 10:25:32

阅读数 724

评论数 0

Redis Pipeline 批处理任务

今天分享一个Redis的小功能,Pipeline(流水线)。Pipeline能够将一组Redis命令组装起来,通过一次请求发给Redis服务端,Redis服务端执行完这些命令之后再将这些命令的结果一次性返回给客户端。 Redis执行一条命令分为四个步骤: 发送命令 命令排队 命令执行 返回结...

2018-09-02 01:22:26

阅读数 201

评论数 0

Redis的多个db机制和渐进式遍历scan命令

今天主要讲两个东西,一个是Redis的多个db机制,另一个是渐进式遍历。 首先来讲一下Redis的多个db机制 Redis中有个默认配置 databases 16 这个配置表示Redis启动后将有16个数据库,select 0 操作将切换到第一个数据库,select 15 将切换到...

2018-08-30 23:45:40

阅读数 372

评论数 0

Redis六种基本数据结构的操作

一、String value是字符串类型。 1.常用命令 set key value:设置key、value setex key seconds value:设置key、value,有效期seconds秒 setnx key value:设置key、value,如果key存在则setn...

2018-08-30 00:39:44

阅读数 199

评论数 0

为什么说Redis单线程效率高

Redis效率高的主要原因有下面几个: 基于内存操作,速度非常快 采用单线程,避免了上下文的切换导致消耗CPU 采用单线程,不用去考虑各种加锁释放锁的问题 使用IO多路复用模型,非阻塞IO Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是...

2018-08-29 10:46:27

阅读数 991

评论数 0

阻塞IO、非阻塞IO、同步IO、异步IO、IO多路复用模型

1、流、IO、文件描述符 文件其实就是一串二进制流,而不论是文件、socket还是pipe等进行IO操作的我们都可以称之为“流”。 通常在信息交互的过程中,我们会对流进行数据的收发操作,可以称之为IO(input/output),从流中读取数据使用输出流,往流中写入数据使用输入流。 文件描述...

2018-08-28 22:40:43

阅读数 78

评论数 0

缓存和数据库数据一致性

1、产生缓存和数据库数据一致性问题的问题 当我们数据库压力大的时候可以对数据库做读写分离,主库负责写操作,从库负责读操作,主从数据库之间采用二进制日志文件来同步数据。 还有另一种解决方案是使用缓存,通常我们使用缓存的姿势是查询直接从缓存中取,缓存中没有则去数据库取,数据库取到结果之后再塞到缓存...

2018-08-27 22:06:29

阅读数 262

评论数 0

类加载和双亲委派模型

1、类加载器 类加载器的作用是加载类到虚拟机内存。 在JVM中表示两个class对象是否为同一个类对象存在两个必要条件 - 类的完整类名必须一致,包括包名。 - 加载这个类的类加载器(ClassLoader)必须相同。 也就是说,在JVM中,即使这个两个类对象(class对象)来源同一个...

2018-08-23 23:25:46

阅读数 106

评论数 0

HashTable源码分析

1、HashTable概述 HashTable以key-value形式存储数据,key不允许为null,value也不允许为null。 HashTable线程安全。 HashTable对大量的方法都添加synchronized锁,所以性能不高。 HashTable底层是数组,又被称为has...

2018-08-22 22:40:43

阅读数 57

评论数 0

HashMap源码分析,基于1.8,对比1.7

一、HashMap概述 1、HashMap概述 HashMap以key-value形式存储数据,key允许为null,value也允许为null。 HashMap线程不安全,需要线程安全的HashMap可以使用ConcurrentHashMap。 HashMap底层是数组,又被称为hash...

2018-08-22 17:29:19

阅读数 228

评论数 0

GC和对象的内存分配

昨天我们聊到了新生代、老年代,也聊到了Monitor GC,那么今天就再详细讲一下Monitor GC和Full GC、内存的分配、新生代往老年代的转移以及触发一次Monitor GC的执行流程。 1、Monitor GC和Full GC 我们先来了解一下什么是Monitor GC和Ful...

2018-08-21 17:22:54

阅读数 127

评论数 0

垃圾收集使用的基本算法

我们都知道Java虚拟机会去回收”死亡”的对象,那么这个”回收 “是怎么回收的呢? 下面介绍几种垃圾收集的基本算法 常见的垃圾收集基本算法 1、标记-清除算法(Mark-Sweep) 标记-清除算法分为”标记”和”清除”两个部分。 标记:在前面文章finalize()方法总结中已...

2018-08-21 17:21:33

阅读数 57

评论数 0

HashMap扩容死循环问题

JDK 1.7 HashMap 扩容核心算法 下面这是JDK 1.7中HashMap扩容时调用的核心代码,作用是将原hash桶中的节点转移到新的hash桶中: void transfer(Entry[] newTable) { Entry[] src = table; in...

2018-08-21 17:18:47

阅读数 1156

评论数 2

位运算符以及常见的使用场景

Java中的位运算有七种: << 左移 >> 右移 >>> 无符号右移 & 位与 | 位或 ...

2018-08-21 17:17:18

阅读数 1255

评论数 2

提示
确定要删除当前文章?
取消 删除
关闭
关闭