Redis
文章平均质量分 93
本Redis专栏将带您深入探索Redis的世界,从基础概念到高级功能,从最佳实践到实用技巧,让您全面了解和充分利用Redis的强大功能。无论您是初学者还是有经验的开发人员,本专栏都将帮助您在Redis领域不断前行。让我们一起探索Redis的无限可能叭!
时间瑾
梦想永在凌云意意气风发,代码成就万世基积沙镇海
展开
-
一篇文章看懂Redission原理
一篇文章看懂Redission原理原创 2024-06-13 08:34:53 · 3433 阅读 · 74 评论 -
分布式锁的王者:Rediision
Rediision是一个Redis的 Java 客户端库,它提供了一种解决 Redis setnx 命令缺点的方法。setnx 命令用于将键的值设置为指定的字符串,但仅在键不存在时才进行设置。它的一个缺点是如果在设置值和过期时间之间发生故障,可能会导致键一直存在而没有设置过期时间,这可能会导致资源浪费或数据不一致。Rediision 使用了 Redis 的 Lua 脚本功能来解决这个问题。它提供了 setnxex 方法,它不仅会设置键的值,还会设置键的过期时间。原创 2024-06-12 08:33:41 · 889 阅读 · 9 评论 -
Redis实现分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路基于Java自身否锁机制 如下图基于非Java的锁机制 如下图那么分布式锁他应该满足一些什么样的条件呢?可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思互斥:互斥是分布式锁的最基本的条件,使得程序串行执行高可用。原创 2024-06-11 09:16:19 · 1506 阅读 · 11 评论 -
Redis用BitMap实现签到
我们按月来统计用户签到信息,签到记录为1,未签到则记录为0.把每一个bit位对应当月的每一天,形成了映射关系。用0和1标示业务状态,这种思路就称为位图(BitMap)。这样我们就用极小的空间,来实现了大量数据的表示Redis中是利用string类型数据结构实现 BitMap,因此最大上限是512M,转换为bit则是 2^32个bit位。SETBIT:向指定位置(offset)存入一个0或1GETBIT :获取指定位置(offset)的bit值。原创 2024-06-10 10:03:12 · 1099 阅读 · 3 评论 -
Redis扫描 bigKey
BigKey内存占用较多,即便时删除这样的key也需要耗费很长时间,导致Redis主线程阻塞,引发一系列问题。原创 2024-06-09 17:36:21 · 490 阅读 · 3 评论 -
Redis 内存回收
Redis 中数据过期策略采用定期删除+惰性删除策略结合起来,以及采用淘汰策略来兜底。:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。:在获取 key 时,先判断 key 是否过期,如果过期则删除。原创 2024-06-08 18:48:57 · 1725 阅读 · 7 评论 -
Redis 持久化: RDB和AOF
Redis 可以通过持久化机制来保证数据在重启后不会丢失。Redis 提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。RDB持久化:RDB 持久化会在Redis数据库中的数据进行快照,并将快照保存到磁盘上的 RDB 文件中。可以通过设置保存快照的条件(比如间隔时间、修改数据量等)来触发 RDB 持久化操作。在 Redis 服务器重启时,可以通过加载 RDB 文件来将数据恢复到内存中。原创 2024-06-03 08:35:09 · 3576 阅读 · 76 评论 -
Redis用GEO实现附近的人功能
GEO就是的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定的两个点之间的距离并返回GEOHASH:将指定member的坐标转为hash字符串形式并返回GEOPOS:返回指定member的坐标。原创 2024-05-31 08:36:49 · 2777 阅读 · 39 评论 -
Redis实现全局唯一id
ID 生成器在微博我们一直叫发号器,微博就是用这样的号来存储,而我微博里讨论的时候也都是以发号器为标签。它的主要目的确如平常大家理解的“为一个分布式系统的数据object产生一个唯一的标识”,但其实在一个真实的系统里可能也可以承担更多的作用。唯一性时间相关粗略有序可反解可制造下面我会分别讲每个作用后面的考虑和权衡,也会对比介绍一下业界已知的几种 ID 设计。要唯一性,是否需要全局唯一?原创 2024-05-30 08:41:13 · 950 阅读 · 7 评论 -
Redis解决缓存一致性问题
由于我们的缓存的数据源来自于数据库, 而数据库的数据是会发生变化的, 因此,如果当数据库中数据发生变化,而缓存却没有同步, 此时就会有一致性问题存在, 其后果是:用户使用缓存中的过时数据,就会产生类似多线程数据安全问题,从而影响业务,产品口碑等;怎么解决呢?有如下几种方案人工编码方式:缓存调用者在更新完数据库后再去更新缓存,也称之为双写方案由系统本身完成:数据库与缓存的问题交由系统本身去处理调用者只操作缓存:其他线程去异步处理数据库,实现最终一致。原创 2024-05-28 14:45:00 · 2404 阅读 · 45 评论 -
Redis实现Session共享
用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息.所以我们可以使用String结构,就是一个简单的key,value键值对的方式,但是关于key的处理,session他是每个用户都有自己的session,但是redis的key是共享的,咱们就不能使用code了。原创 2024-05-27 12:45:00 · 2097 阅读 · 8 评论 -
Redis使用Set实现点赞功能
Redis中的set类型是一组无序的字符串值。set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。:向指定键名的集合中添加一个或多个成员,并返回成功添加的成员数量。:从指定键名的集合中移除一个或多个成员,并返回成功移除的成员数量。:返回指定键名集合中所有的成员。:检查指定成员是否在集合中,存在返回1,不存在则返回0。:随机获取指定键名集合中的一个或多个成员。如果指定count参数,则表示获取不重复的count个随机成员。SCARD key:获取指定键名集合中的成员数。原创 2024-05-27 08:26:40 · 471 阅读 · 4 评论 -
Java客户端SpringDataRedis(RedisTemplate)
方案一自定义RedisTemplate修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer会占用额外的内存空间 记录字节码方案二使用StringRedisTemplate写入Redis时,手动把对象序列化为JSON读取Redis时,手动把读取到的JSON反序列化为对象。原创 2024-05-26 20:18:29 · 458 阅读 · 0 评论 -
RedisTemplate操作Redis, 看这一篇文章就够了
RedisTemplate 是 Spring Framework 提供的用于操作 Redis 数据库的模板类。通过 RedisTemplate,开发人员可以方便地使用 Spring 提供的 API 来对 Redis 进行操作,比如设置值、获取值、删除值等。RedisTemplate 封装了 Redis 连接、数据序列化、异常处理等操作,简化了与 Redis 的交互过程。一般情况下,开发人员需要配置 Redis 连接池、序列化器等信息,并将 RedisTemplate 注入到需要使用 Redis 的 Be原创 2024-05-24 08:43:57 · 1389 阅读 · 21 评论 -
Java客户端SpringDataRedis(RedisTemplate)上手
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做提供了对不同Redis客户端的整合(Lettuce和Jedis)提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现中提供了工具类,其中封装了各种对。原创 2024-05-21 13:55:22 · 868 阅读 · 0 评论 -
RedisTemplateAPI:ZSet
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。可排序元素不重复查询速度快因为SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。原创 2024-05-21 08:48:37 · 630 阅读 · 3 评论 -
RedisTemplateAPI:Set
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet无序元素不可重复查找快支持交集.并集.差集等功能。原创 2024-05-21 08:35:14 · 646 阅读 · 0 评论 -
RedisTemplateAPI:List
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。特征也与LinkedList有序元素可以重复插入和删除快查询速度一般。原创 2024-05-20 08:33:21 · 562 阅读 · 3 评论 -
RedisTemplateAPI:Hash
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。keyvalueHash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。原创 2024-05-19 16:38:50 · 979 阅读 · 0 评论 -
RedisTemplateAPI:String
String 类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:●string:普通字符串●int:整数类型,可以做自增.自减操作●float:浮点类型,可以做自增.自减操作不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过 512 MB。原创 2024-05-19 07:42:12 · 1120 阅读 · 2 评论 -
一篇文章拿下 Redis缓存穿透,缓存击穿,缓存雪崩
本篇文章解决了在使用 Redis 过程中遇到的高并发情景下的缓存穿透和缓存击穿及缓存雪崩问题.原创 2024-05-16 08:51:14 · 1821 阅读 · 13 评论 -
一文解决Redis缓存击穿、缓存穿透、缓存雪崩问题
Redis 的使用过程中, 处理不当会造成缓存击穿 缓存穿透和缓存雪崩问题, 本篇文章介绍解决这些问题的常规方法.原创 2024-05-15 09:42:15 · 935 阅读 · 9 评论 -
一篇文章拿下Redis 通用命令
本篇文章介绍 Redis 的通用命令, 通用命令在 Redis 的所有数据类型下都使用, 学好通用命令可以让我们更好的使用 Redis.原创 2024-05-14 09:03:53 · 2071 阅读 · 25 评论 -
Redis五大基本数据类型介绍及其使用场景
Redis 是一个开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持==字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs== 等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过`Redis Sentinel`提供高可用,通过`Redis Cluster`提供自动分区。原创 2024-05-13 09:49:24 · 1415 阅读 · 16 评论 -
学 Redis , 从安装 Redis 开始: Linux 安装 Redis(CentOS 安装 Redis)
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此我们会基于Linux系统来安装Redis此处选择的Linux版本为CentOS7。原创 2024-05-11 11:30:55 · 1002 阅读 · 1 评论 -
从关系型数据库和非关系型数据库说起
非关系型数据库(NoSQL)是一种数据库管理系统,它采用了非传统的表格关系模型,与传统的关系型数据库(如SQL数据库)不同。非关系型数据库通常以键值对、文档、列族、图形等形式存储数据,以适应对大数据量、高并发性、分布式部署等需求的处理。原创 2024-05-10 14:19:06 · 721 阅读 · 2 评论