草庐IT

redis(12)持久化操作-RDB

前言Redis提供了2个不同形式的持久化方式:RDB(RedisDataBase)AOF(AppendOfFile) RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 备份是如何执行的Redis会单独创建(fork)一个子进程来进行持久化,首先会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后

Redis 缓存过期策略和内存淘汰策略

缓存过期策略定时删除没人用含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除优点:该策略可以立即清除过期的数据,保证内存被尽快释放缺点:若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重惰性删除内置策略含义:key过期的时候不删除,只有当访问这个key的时候才去判断缓存是不是过期,若过期,则删除,返回null。优点:删除操作只发生在从

redis分布式锁原子性设置超时问题

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(10)事务和锁机制

Redis事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队。 Multi、Exec、discardRedis事务中有Multi、Exec和discard三个指令,在Redis中,从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。而组队的过程中可以通过discard来放弃组队 案列说明组队成功:我们输入multi进行组队,将setk1v1和setk2v2两条

redis(4)String字符串

前言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(2)概述与安装

前言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-

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

MongoDB和Elasticsearch的各使用场景对比

MongoDBvsElasticsearchMongoDBElasticSearch备注定位(文档型)数据库(文档型)搜索引擎一个管理数据,一个检索数据资源占用一般高mongo使用c++,es使用Java开发写入延迟低高es的写入延迟默认1s,可配置,但是要牺牲一些东西全文索引支持度一般非常好es本来就是搜索引擎,这个没啥可比性有无Schema无无两者都是无Schema支持的数据量PB+TB+~PB两者支持的量并不好说的太死,都支持分片和横向扩展,但是相对来说MongoDB的数据量支持要更大一点性能非常好好MongoDB在大部分场景性能比es强的多得多索引结构B树LSM树es追求写入吞吐量,M

redis georadius源码分析与性能优化

原文地址:https://blog.fanscore.cn/a/51/背景最近接到一个需求,开发中使用了redisgeoradius命令取附近给定距离内的点。完工后对服务进行压测后发现georadius的性能比预期要差,因此我分析了georadius的源码,并对原始的实现方案进行了优化,总结成了本文。我们生产环境使用的redis版本为4.0.13,因此本文redis源码皆为4.0.13版本的源码redisgeo原理往redis中添加坐标的命令是GEOADDkeylongitudelatitudemember[longitudelatitudemember...],实际上redis会将经纬度转成

Redis - 介绍与使用场景

简介Redis的全称是RemoteDictionaryServer,是一个使用C语言编写的、开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis的数据是存储在内存中的,所以读写速度非常快,被广泛应用于缓存方向,当然也有持久化数据库的用法。优缺点优点读写性能优异,Redis能读的速度是110000次/s,写的速度是81000次/s数据类型丰富,有String、List、Hash、Set、SortedSet等单线程原子性,Redis所有的操作都是原子性的,也支持多个操作合并后的原子执行丰富的特性,Redis支持发布订阅、通知、key过期等功能支持持久化,Redis支持RDB、