
redis
文章平均质量分 69
shaofei_huai
这个作者很懒,什么都没留下…
展开
-
redis 实现分布式锁
在单机系统中可以将锁的标识放入应用内存中。但分布式系统中需要将锁的标识放入共享存储系统中,如果不要求强一致性可以使用redis作为共享存储系统。单节点分布式锁 单节点分布式锁指应用在设置标识时只操作单节点redis,如果对可靠性要求不高可以使用单节点实现分布式锁。其实现也比较简单。主要利用redis单线程处理请求模式设置锁标识。 流程如下图: 1.线程A,B两个请求,A先进入redis对flag进行setnx操作(setnx key ...原创 2021-08-14 21:18:20 · 217 阅读 · 0 评论 -
spring boot 使用redistemplate操作redis
redistemplate是spring对jedis的封装。相对于jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用。以下为redistemplate简单使用。1.引入spring-data-redis <!-- 对于版本号没有要求不需要显示指定version,spring boot已集成该jar --> <dependency> <groupId>org.springframework.data</gro...原创 2021-08-13 23:18:30 · 1147 阅读 · 0 评论 -
redis原子操作(单命令与lua脚本)
原子操作是指执行过程不需要加锁并且保证多个操作是原子性的,使用原子操作可以保证并发时数据准确性,降低对系统性能的影响。比如记录投票数分为3步,先读取原投票数,然后将原投票数加1,最后写回redis。如果不使用原子操作并发情况下会造成投票丢失等问题。加锁的话会降低系统性能,而且加锁就不多说了,只能说做的多错的多,能不加锁就不加锁。redis提供以下两种原子操作方法。单命令操作 由于redis使用单线程来串行处理客户端的请求操作,所以当 redis 执行...原创 2021-08-12 21:42:54 · 3967 阅读 · 0 评论 -
redis集群中hash tag 使用
hash tag用于redis集群中。其实现方式为在key中加个{},例如test{1}。使用hash tag后客户端在计算key的crc16时,只计算{}中数据。如果没使用hash tag,客户端会对整个key进行crc16计算。下面演示下hash tag使用。127.0.0.1:6380> cluster keyslot user:case(integer) 9491127.0.0.1:6380> cluster keyslot user:case{1}(inte...原创 2021-08-10 23:07:11 · 9000 阅读 · 0 评论 -
redis cluster 集群搭建及常见操作
随着业务增长,redis中需要缓存的数据会越来越多。例如现有redis实例内存为4G,但业务增长后需要存储redis中数据为5G。对于此情况常见的两种常见解决方案就是加机器配置或者搭建集群,下面我列个表格比较下两种方案优缺点。 优点 缺点 加配置 快、简单 一、实例中数据越来越多,生成RDB时fork阻塞时间越来越长。 二、主从情况下:主库加配置从库也要相应的加配置 三、主库挂了,从库只能读,不能写 集群 一、...原创 2021-08-09 22:30:40 · 1627 阅读 · 0 评论 -
redis缓存淘汰策略
redis使用内存保存数据,使用redis可以避免从数据库读取,提高响应速度。但内存大小有限,当数据过多时,缓存不可避免的会被写满。针对该情况,redis提供对应缓存淘汰策略,了解各种缓存淘汰策略,在使用时合理设置缓存淘汰策略可以避免缓存被写满,提高缓存命中率,提升系统性能。 目前最新版本6.2.5提供8种缓存淘汰策略,这些缓存淘汰策略可以根据淘汰类型分为如下三大类:...原创 2021-08-07 20:15:39 · 1361 阅读 · 0 评论 -
redis主从搭建及同步流程
主从可以提高redis可用性,主从概念就是将一份数据同步到不同实例上,即使其中一个实例意外宕机,其他实例也可以对外提供服务。主从流程 主从建立可以分为三个阶段:阶段一:从库向主库发送psync 主库run idoffset命令请求建立连接。其中run id为实例唯一id,offset为偏移量。此时第一次建立连接,从库还不知道主库run id,并且全量复制主库数据。所以具体命令为psync ? -1。主库收到psync命令后将主库run id与当...原创 2021-08-05 21:06:35 · 996 阅读 · 0 评论 -
redis哨兵集群搭建及工作流程
redis搭建主从后,对可用性已经有了提高,但假如主库宕机,则无法对外提供写请求。为解决此类问题,redis提供哨兵机制,对主库进行监控,发现主库宕机会进行选主操作,选主完成后通知其他从库新主库信息。哨兵搭建1.搭建好主从并启动,最好三台以上2.依次修改每个redis目录下sentinel.conf文件,该文件主要参数如下哨兵端口号,每个哨兵使用不同端口port 26379 yes为后台启动daemonize yes 监控的主库,当2个哨兵认为主库宕机,进行...原创 2021-08-06 22:55:38 · 1232 阅读 · 0 评论 -
redis持久化机制AOF与RDB
redis作为内存数据库,数据都保存在内存中。如果没有相应的持久化机制,一旦服务宕机,则数据会全部丢失。为解决数据罗盘问题,redis提供两种持久化机制AOF日志与RDB快照。AOF AOF写入与数据库的wal机制正好相反,在数据写入过程中先把数据写入内存,然后再写入日志。相对来说这种写入方式有优点也有缺点。 优点:1.由于AOF日志中写入的是redis命令,先写内存可以省去检验命令是否正确步骤。 2.不阻塞写入...原创 2021-08-04 22:49:59 · 1524 阅读 · 2 评论 -
redis 内存碎片清理
内存碎片指在内存分配使用过程中,产生的不能被重复利用的内存空间。以下图为例,内存空间还有3K,应用程序想申请3K连续空间,虽然总量够,但是仍然会申请失败。对于这种无法利用的空间,称之为内存碎片内存碎片形成原因1.内存分配策略引发:redis默认使用jemalloc分配器分配内存。jemalloc每次分配2*N固定空间,例如写入数据申请10K空间,jemalloc会为其分配16K空间。这样分配优点是下次写入>=6K数据不用再申请内存空间,缺点是造成内存浪费。...原创 2021-08-03 22:42:19 · 3178 阅读 · 0 评论 -
redis 基本数据类型适用场景及数据结构
redisObject redis对象由redisObject统一管理,可以理解为redisObject是redis对象的父类,目前版本redisObject代码如下#define LRU_BITS 24typedef struct redisObject { unsigned type:4; /* redis数据类型 */ unsigned encoding:4; /* redis数据结构类型 */ unsigned lru:LRU_B...原创 2021-08-01 17:14:15 · 1261 阅读 · 0 评论 -
redis扩展数据类型使用
redis除了五种基本数据类型外还有Bitmap,HyperLogLog,GEO,Stream这些扩展类型。使用扩展类型,可以高效的处理一些特定需求。BitmapBitmap也叫位图它只有0和1两个值,底层基于String类型,由于String 类型会保存为二进制的字节数组,所以redis 把字节数组的每个 bit 位利用起来,构成 bit 数组以达到节省内存空间的目的。 基于Bitmap特性,通常用其实现签到,展示用户在线状态,布隆过滤器等业务。...原创 2021-08-02 22:33:22 · 1063 阅读 · 0 评论