
redis
文章平均质量分 65
PkyShare
每天进步一点点
展开
-
redis 缓存穿透和雪崩
1 缓存穿透1.1 介绍 key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。1.2 解决方案 一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。布隆过滤器 将所有可能存在的数据转载 2021-05-19 23:59:02 · 97 阅读 · 0 评论 -
Redis 主从复制
1 介绍 和 Mysql 主从复制的原因一样,Redis 虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制。 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器中。前者称为主节点(master),后者称为从节点(slave)。数据的复制是单向的,只能由主节点到从节点。master 以写为主,slave 以读为主。2 作用数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现原创 2021-05-19 22:24:13 · 137 阅读 · 0 评论 -
Redis发布订阅
1 模型 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 如图所示。首先订阅者先订阅某一频道的消息,当发布者要更新消息时会发送到频道队列中,频道队列就会发送消息给订阅者。类似于关注博主一样,当博主更新文章时,就会提醒粉丝消息。2 测试2.1 订阅 首先粉丝先订阅消息,打开一个 redis 的客户端作为粉丝的终端,输入 SUBSCRIBE 订阅一个 pkyShare 的订阅号。127.0.0.1:6379>原创 2021-05-19 17:13:15 · 104 阅读 · 0 评论 -
redis 持久化(RDB、AOF)
1 介绍 redis 是基于内存存储的数据库,为避免断电或服务器宕机重启导致数据丢失,因此需要持久化。 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘中,也就是 snapshot 快照,发生宕机重启后,直接将快照文件读入内存即可。 redis 的持久化有两种,rdb 与 aof。3 RDB redis 的默认持久化方式。3.1 持久化过程 redis 会单独创建一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束后,再用这个临时文件替换上次的吃句话好的原创 2021-05-19 01:00:39 · 131 阅读 · 0 评论 -
redis 配置文件( IP、端口、密码等信息)
1 单位# Note on units: when memory size is needed, it is possible to specify# it in the usual form of 1k 5GB 4M and so forth:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes#原创 2021-05-18 22:24:45 · 1328 阅读 · 0 评论 -
SpringBoot 整合redis
1 说明 在 SpringBoot 2.x 之后,原来使用 Jedis 连接 redis 被替换成了 lettuce。两者的差别如下Jedis 使用同步和阻塞 IO 的方式,不支持异步;lettuce支持异步,底层是基于netty框架的事件驱动作为通信层。Jedis 设计上就是基于线程不安全来设计,一个连接只能被一个线程使用,但是可以结合连接池来提高其性能;lettuce 和 Redis 基于线程安全来设计的,一个连接是被共享使用的,但是也提供了连接池,主要用于事务以及阻塞操作的命令。2原创 2021-05-18 01:35:36 · 142 阅读 · 0 评论 -
排查通过服务器中 redis 的漏洞植入 pnscan 病毒进行挖矿
1 描述 最近买了一台云服务器进行学习研究,然后装了 redis,怎想到了某天晚上 22:00 开始服务器就卡顿了,输入命令半天没响应,然后重新连接则多次超时。最后连接上去了,输入命令 uptime ,显示如下图: 我的服务器是 1 核心的,信息显示有另一个用户,而且后面三个参数都超过了 1,表示当前 CPU 严重过载。 再在云服务器管理页面查看可视化界面,如下图: 没遇到过这种情况,然后就提交了工单叫云服务器人员帮忙处理。2 结果与分析 结果是攻击者通过 redis 的安全漏洞植入原创 2021-05-17 23:35:13 · 952 阅读 · 0 评论 -
Jedis(结合 redis 事务、乐观锁)
1 介绍 Jedis 是 Redis 官方推荐的 Java 连接开发工具。2 Maven <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version><!--版本号可根据实际情况填写--原创 2021-05-16 22:10:33 · 230 阅读 · 1 评论 -
redis 乐观锁
1 介绍 当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。 一般通过乐观锁与悲观锁实现并发控制。1.1 乐观锁 乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。原创 2021-05-16 17:16:25 · 237 阅读 · 0 评论 -
Redis 事务
1 介绍 Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。2 命令开启事务并执行127.0.0.1:6379> MULTI # 开启事务OK127.0.0.1:63原创 2021-05-16 16:33:40 · 520 阅读 · 2 评论 -
redis 特殊数据类型 bitmap
bitmap 就是通过最小的单位 bit 来进行 0 或者 1 的设置,表示某个元素对应的值或者状态。一般用于签到、登陆、活跃等状态。8 bit = 1 byte = 0.001 kb,因此极大的节省存储空间。1 基本命令插入(以一个星期的活跃来设置)127.0.0.1:6379> SETBIT active 1 1 # 设置周一的值(integer) 0127.0.0.1:6379> SETBIT active 2 0 # 设置周二的值(integer) 0127.原创 2021-05-16 01:15:17 · 138 阅读 · 0 评论 -
redis 特殊数据类型 HyperLogLog
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样原创 2021-05-16 00:46:58 · 112 阅读 · 0 评论 -
redis 特殊数据类型 geospatial(地理位置)
1 基本命令插入 将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,该命令以采用标准格式的参数 x, y,所以经度必须在纬度之前。非常靠近极点的位置是不能被索引的。 有效的经度:-180 度到 180 度 有效的纬度:-85.05112878 度到 85.05112878 度超出范围则报错。127.0.0.1:6379> GEOADD guangdong-city 113.27324 23.15792 guangzhou # 插入广州坐标(integer)原创 2021-05-15 22:58:19 · 263 阅读 · 0 评论 -
redis 数据类型 sorted set(有序集合)
1 基本命令 Zset 叫做有序集合,而 Set是无序的,Zset 怎么做到有序的呢?就是 Zset 的每一个成员都有一个分数与之对应,并且分数是可以重复的。插入127.0.0.1:6379> ZADD score 50 zhangsan # 插入,其中 key 为 score, 50 为分数,zhangsan 为成员(integer) 1127.0.0.1:6379> ZRANGE score 0 -1 # 查看所有成员1) "zhangsan"127.0.0.1:6379原创 2021-05-15 18:54:48 · 324 阅读 · 0 评论 -
redis 数据类型 Hash(哈希)
1 基本命令 Map 集合形式为 key-map,也就是说 value 其实是以 map 形式展示的,本质和 String 类型没啥不一样,还是简单的 key - value插入、删除、获取127.0.0.1:6379> HSET stus id1 222 # 插入(integer) 1127.0.0.1:6379> HGET stus id1 # 获取"222"127.0.0.1:6379> HMSET stus id2 333 id3 444 # 同时插入多个值原创 2021-05-15 12:21:35 · 166 阅读 · 0 评论 -
redis数据类型 Set (集合)
1 基本命令插入、删除、查找 和 Java 的 Set 差不多,不可重复插入相同数据,无序。127.0.0.1:6379> SADD num one # 插入元素(integer) 1127.0.0.1:6379> SADD num two(integer) 1127.0.0.1:6379> SADD num three(integer) 1127.0.0.1:6379> SMEMBERS num # 获取集合所有值(可以和 List 作对比看出,Set 是原创 2021-05-15 11:22:33 · 205 阅读 · 2 评论 -
redis 数据类型 List(列表)
1 基本命令插入 插入操作相当于栈、队列。也可以看成是默认从左到右插入。127.0.0.1:6379> LPUSH num one # 向列表中插入值(integer) 1127.0.0.1:6379> LPUSH num two (integer) 2127.0.0.1:6379> LPUSH num three(integer) 3127.0.0.1:6379> LRANGE num 0 -1 # 获取列表所有值1) "three"2) "two"原创 2021-05-15 01:40:32 · 288 阅读 · 2 评论 -
redis 数据类型 String
1、String 类型1.1 基本命令拼接、长度、截取、替换127.0.0.1:6379> set say hello # 设置 key - valueOK127.0.0.1:6379> get say # 获取 value"hello"127.0.0.1:6379> exists say # 判断 key 是否存在(integer) 1127.0.0.1:6379> append say ",I'm Jay" # 追加(integer) 13127.0.原创 2021-05-15 00:20:53 · 117 阅读 · 0 评论 -
redis 安装使用
1、window下载 百度网盘:https://pan.baidu.com/s/1z1_OdNVbtgyEjiktqgB83g 提取码:kdfq解压启动 redis 服务 redis-server.exe启动客户端,并设置键值2、Centos 7下载 链接:http://download.redis.io/releases/选择想要的版本。上传并解压到相应路径,我解压到 /usr/local/redis 中[root@VM-0-4-centos redis原创 2021-05-14 18:31:43 · 156 阅读 · 0 评论