Redis
文章平均质量分 77
fFee-ops
it's tough.
展开
-
Redis性能压测
Redis 的性能测试工具,目前主流使用的是 redis-benchmark简介Redis 官方提供 redis-benchmark的工具来模拟 N 个客户端同时发出 M 个请求,可以便捷对服务器进行读写性能压测。语法redis 性能测试的基本命令如下:redis-benchmark [option] [option value]redis 性能测试工具可选参数如下所示:测试快速测试redis-benchmark在安装 Redis 的服务器上,直接执行,不带任何参数,即可进行测试。原创 2022-03-12 19:25:33 · 2790 阅读 · 0 评论 -
lua脚本以及redis慢查询日志
lua脚本lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua应用场景:游戏开发独立应用脚本Web应用脚本扩展和数据库插件Nginx + lua开发高性能web应用,限流、防止Sql注入…Redis使用lua脚本版本:自2.6.0起可用,通过内置的lua编译/解释器,可以使用EVAL命令对lua脚本进行求值。时间复杂度:取决于执行的脚本。使用Lua脚本的好处:减少网络开销。可以将多个原创 2022-02-20 15:27:48 · 1071 阅读 · 0 评论 -
geo类型
概述Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。应用场景:附近的人、摇一摇、附近的车、附近银行站点查询环境要求redis版本需要3.2及以上如果使用jedis操作redis,需要jedis版本为2.9及以上如果使用spring data redis操作redis,需要spring data redis版本原创 2022-02-19 20:36:28 · 514 阅读 · 0 评论 -
bitmap类型
介绍bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 Byte,所以bitmap 本身会极大的节省储存空间。bitmap最大为2的32次方个bit常用命令setbit 、 getbit 、 bitcount 、 bitop应用场景适合需要保存状态信息(比如是否签到、是否登录…)并需要进一步对这些信息进行分析的场景。比如用户签到情况、活跃用户情况、用原创 2022-02-19 20:23:51 · 1204 阅读 · 0 评论 -
hash类型
介绍hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组 + 链表)。不过,Redis 的hash 做了更多优化。另外,hash 是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以 hash数据结构来存储用户信息,商品信息等等。其实它的结构可以看成 (K,(K,V)),只不过val中的K被称为filed常用命令hset,hmset,hexists,hget,h原创 2022-02-19 18:58:58 · 897 阅读 · 0 评论 -
string类型
Redis的Key的设计用:分割把表名转换为key前缀, 比如: user:第二段放置主键值第三段放置列名string字符串类型介绍string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(simple dynamic string,SDS)。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)原创 2022-02-19 18:48:25 · 495 阅读 · 0 评论 -
Redis安装布隆过滤器
关于布隆过滤器的简介请看这篇文章 :https://juejin.cn/post/6844904013419249678安装在redis布隆过滤器插件地址下载最新的release源码,在编译服务器进行解压编译wget https://github.com/RedisBloom/RedisBloom/archive/v2.2.4.tar.gz然后解压插件进行插件的编译tar RedisBloom-2.2.4.tar.gzcd RedisBloom-2.2.4make编译得到动态库 rebl原创 2022-02-16 11:30:59 · 718 阅读 · 0 评论 -
redis五种数据结构底层实现
redis五种数据结构底层实现Stringlisthashsetzset对应结构的讲解动态字符串SDS空间预分配惰性空间释放int双向链表ziplist哈希表intset跳表性质String其中:embstr和raw都是由SDS动态字符串构成的。唯一区别是:raw是分配内存的时候,redisobject和 sds 各分配一块内存,而embstr是redisobject和raw在一块儿内存中。listhashsetzset对应结构的讲解动态字符串SDSSDS是”simple dyn原创 2021-02-09 23:10:44 · 426 阅读 · 0 评论 -
Redis集群搭建
Redis集群搭建创建集群步骤可以查看Redis官网查看集群搭建方式,连接如下官方手册以下步骤是在一台 Linux 服务器上搭建有6个节点的 Redis集群。创建集群步骤1、把下载好的redis-5.0.2.tar.gz放在/usr/local文件夹下,并解压wget http://download.redis.io/releases/redis-5.0.2.tar.gztar xzf redis-5.0.2.tar.gzcd redis-5.0.2进入到解压好的redis-5.0.2原创 2020-09-09 09:11:29 · 180 阅读 · 0 评论 -
Redis Cluster集群的简介
Redis Cluster集群的简介简介Redis Cluster集群特点Redis Cluster容错redis-cluster节点分配Redis Cluster高可用(Redis Cluster主从模式)Redis Cluster总结简介• 为什么使用redis-cluster? 为了在大流量访问下提供稳定的业务,集群化是存储的必然形态Redis集群搭建的方式有多种,但从redis 3.0之后版本支持redis-cluste原创 2020-09-08 22:30:45 · 278 阅读 · 0 评论 -
Redis哨兵机制
Redis哨兵机制前言1、哨兵机制简介2、哨兵进程的作用3、哨兵进程的工作方式哨兵机制模拟演示前言之前说的主从复制虽然一定程度上解决了问题但是还有一些缺点:没有办法对 master 进行动态选举(当 master 挂掉后,会通过一定的机制,从 slave 中选举出一个新的 master),需要使用 Sentinel 机制完成动态选举。1、哨兵机制简介1)Sentinel(哨兵) 进程是用于监控 Redis 集群中 Master 主服务器工作的状态2)在 Master 主服务器发生故障的时候,可以原创 2020-09-08 17:44:46 · 280 阅读 · 0 评论 -
Redis主从复制
Redis主从复制为什么要提出主从复制如何提升系统的并发能力主从复制简介Redis主从复制 配置为什么要提出主从复制单点Redis容易出现以下问题①、从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大; (容错性)②、从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内容用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。如何提升系统的并发能力①垂直扩展(Scale Up)垂直原创 2020-09-08 16:35:55 · 228 阅读 · 0 评论 -
热点key
热点key简介解决办法案例简介某个key访问非常频繁,当key失效的时候有大量线程来构建缓存,导致负载增加,系统崩溃。(可以理解为新浪微博头条)解决办法1 使用锁,单机用synchronized,lock等,分布式用分布式锁。2 缓存过期时间不设置,而是设置在key对应的value里。如果检测到存的时间超过过期时间则异步更新缓存。3在value设置一个比过期时间t0小的过期时间值t1,当t1过期的时候,延长t1并做更新缓存操作。4设置标签缓存,标签缓存设置过期时间,标签缓存过期后,需异步地更新原创 2020-09-07 15:26:27 · 283 阅读 · 0 评论 -
缓存穿透与雪崩
缓存穿透与雪崩缓存穿透简介解决办法缓存雪崩简介解决办法缓存穿透简介缓存穿透是指查询一个一定不存在的数据,由于缓存不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决办法持久层查询不到就缓存空结果,以后再查询时先判断缓存中是否exists(key) ,如果有直接返回空,没有则查询后返回空结果。注意:如果之后给这个数据插入了值,那么需清除之前key的空结果,否则即便DB中有值也查询不到(当然也可以设置空缓存的过期时间)缓存雪崩简原创 2020-09-07 15:15:57 · 100 阅读 · 0 评论 -
Redis持久化
Redis持久化什么是Redis持久化什么是Redis持久化持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。 Redis 提供了两种持久化方式:RDB(默认)和AOF原创 2020-09-06 21:47:51 · 261 阅读 · 0 评论 -
过期删除策略&内存淘汰策略
Redis官方给的警告,当内存不足时,Redis会根据配置的缓存策略淘汰部分Keys,以保证写入成功。当无淘汰策略时或没有找到适合淘汰的Key时,Redis直接返回out of memory错误。最大缓存配置 在redis中,允许用户设置最大使用内存大小 maxmemory 512G建议:了解了Redis的淘汰策略之后,在平时使用时应尽量主动设置/更新key的expire时间,主动剔除不活跃的旧数据,有助于提升查询性能...原创 2020-09-06 11:02:35 · 163 阅读 · 0 评论 -
Redis事务
Redis事务简介应用场景Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞)简介Redis 事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令), 并且带有以下两个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。Redis会将一个事务中的所有命令序列化,然后按顺序执行执原创 2020-09-06 09:49:11 · 139 阅读 · 0 评论 -
Redis多数据库
Redis多数据库Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数: database 16 //(从0开始 1 2 3 …15)select 数据库: 数据库的切换移动数据(将当前key移动另个库):move key名称 数据库数据库清空:flushdb :清除当前数据库的所有keyflushall :清除整个Redis的数据库所有key...原创 2020-09-06 09:32:39 · 125 阅读 · 0 评论 -
Redis发布订阅
Redis发布订阅简介常用命令应用场景简介Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:常用命令订阅频道:SUBSCRIBE c原创 2020-09-06 09:27:59 · 249 阅读 · 0 评论 -
HyperLogLog
文章目录简介为什么需要HyperLoglog常用命令应用场景总结简介Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。原创 2020-08-11 11:33:17 · 205 阅读 · 0 评论 -
ZSet
...简介常用命令应用场景使用lettuce操作ZSet简介1、Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。2、不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。3、有序集合的成员是唯一的,但分数(score)却可以重复。4、集合是通过哈希表实现的。 集合中最大的成员数为 2次方32 - 1 (4294967295, 每个集合可存储40多亿个成员)。Redis的ZSet是有序、且不重复 (很多时候,原创 2020-08-11 11:21:44 · 430 阅读 · 0 评论 -
Set类型
= =命令应用场景RedisTemplate操作SetRedis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,set是通过hashtable实现的 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 类似于JAVA中的 Hashtable集合命令赋值语法:SADD key member1 [member2] :向集合添加一个或多个成员取值语法:SCAR原创 2020-08-05 22:27:48 · 1304 阅读 · 0 评论 -
List类型
~~常用命令应用场景List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。更详细的说,List类型是一个双端链表的节点,可以通过相关的操作进行集合的头部或者尾部添加和删除元素。按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232- 1 个元素 (4294967295, 每个列表超过40亿个元素) 类似JAVA中的LinkedList常用命令赋值赋值语法:LPUSH key value1 [value2] :将一个或多个值插入原创 2020-08-05 15:21:13 · 2338 阅读 · 0 评论 -
基于Redis实现限制登录功能
title具体代码实现需求:用户在2分钟内,仅允许输入错误密码5次。如果超过次数,限制其登录1小时。(要求每登录失败时,都要给相应提式)思路:**1、**判断当前登录的用户是否被限制登录 1.1如果没有被限制(执行登录功能)2、 判断是否登录成功 2.1登录成功–>(清除输入密码错误次数信息) 2.2登录不成功原创 2020-07-25 10:45:43 · 1629 阅读 · 0 评论 -
基于Redis实现邮箱发送验证码功能
title需求:用户在客户端输入邮箱,点击发送后随机生成4位数字码。有效期为40秒。输入验证码,点击验证,返回成功或者失败。前端页面<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org" ><head> <meta charset="UTF-8"> <title>Title</title></head><s原创 2020-07-22 20:44:04 · 1240 阅读 · 2 评论 -
SpringBoot2.x中redis使用(lettuce)
文章目录测试String类型测试hash类型pom.xml中添加如下依赖 <!--默认是lettuce客户端--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </d原创 2020-07-22 12:03:10 · 539 阅读 · 3 评论 -
SpringBoot整合Jedis
文章目录Jedis操作String类型Jedis操作Hash类型我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,使用jedis来实现redis缓存来达到高效缓存的目的引入依赖:<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId原创 2020-07-22 11:43:59 · 421 阅读 · 0 评论 -
常用命令
文章目录Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等keys * : 返回满足的所有键 ,可以模糊匹配 比如 keys abc* 代表 abc 开头的 keyexists key :是否存在指定的key,存在返回1,不存在返回0expire key second:设置某个key的过期时间 时间为秒del key:删除某个keyttl key:查看剩余时间,当key不存在时,返回 -2;存在但没原创 2020-07-19 21:10:59 · 148 阅读 · 0 评论 -
Redis 安装、启动、关闭、配置详解
文章目录Redis安装Redis安装Redis是C语言开发,安装Redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc安装gccgcc的安装很简单,首先要确保root登录,其次就是Linux要能连外网yum -y install gcc automake autoconf libtool make注意:运行yum时出现/var/run/yum.pid已被锁定,PID为xxxx的另一个程序正在运行的问题的解决办法:rm -f /var/run/yum.原创 2020-07-18 22:03:41 · 365 阅读 · 0 评论 -
Redis简介
文章目录什么是RedisNoSQLNoSQL的类别NoSQL数据库适用情况Redis优、缺点什么是RedisRedis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。BSD是"Berkeley Software Distribution"的缩写,意思是"伯克利软件发行版"。 BSD开源协议是一个给于使用者很大自由的协议。原创 2020-07-18 15:24:47 · 917 阅读 · 0 评论