redis中挖掘有用的Key
Redis作为一个高性能的内存数据库,被广泛应用于各种场景中。在实际使用中,我们可能会创建很多Key,但是有些Key却没被使用,占用内存资源。因此,我们需要挖掘出有用的Key,释放无用Key占用的内存资源。本文将介绍如何挖掘有用的Key。
一、命令
Redis提供了一些命令来查看Key的信息,常见的命令有:KEYS、SCAN、OBJECT、EXISTS等。
1. KEYS命令
KEYS命令可以查找指定的Key,但是这个命令会遍历整个数据库,对性能造成很大的影响。因此,不建议在生产环境中使用该命令。
2. SCAN命令
SCAN命令可以用来遍历所有的Key,该命令会分多次执行,避免一次性遍历所有的Key对性能造成的影响。
while True:
cursor, key = redis.scan(cursor=cursor, match=’pattern*’, count=100)
if cursor == 0:

上面的代码使用了Python Redis库实现SCAN命令,可以遍历以pattern开头的所有Key,并保存到数组keys中。3. OBJECT命令OBJECT命令可以查看指定Key的信息,包括类型、空间占用等信息。```pythonobj_type = redis.type(key)obj_size = redis.memory_usage(key)
上面代码使用Python Redis库实现OBJECT命令,可以查看指定Key的类型和空间占用。
4. EXISTS命令
EXISTS命令可以判断指定的Key是否存在。
if redis.exists(key):
# do something
上面代码使用Python Redis库实现EXISTS命令,可以判断指定的Key是否存在。二、使用场景1. 统计Key的数量```pythoncount = redis.dbsize()
上面代码使用Python Redis库实现dbsize命令,可以统计数据库中Key的数量。
2. 统计Key的空间占用
memory_size = 0
for key in redis.scan_iter():
memory_size += redis.memory_usage(key)
上面代码遍历所有Key,使用memory_usage命令统计每个Key的空间占用,最终得到数据库的空间占用。3. 找出空闲的Key```pythonidle_keys = []for key in redis.scan_iter():idle_time = redis.object(idletime, key)if idle_time > 600: # 空闲时间超过10分钟,将这个Key加入到idle_keys数组中idle_keys.append(key)
上面代码使用object命令查找每个Key的空闲时间,如果空闲时间超过10分钟,将这个Key加入到idle_keys数组中。
4. 找出最近被访问的Key
recently_keys = []
for key in redis.scan_iter():
access_time = redis.object(atime, key)
recently_keys.append((access_time, key))
recently_keys = sorted(recently_keys, reverse=True)[:10] # 取最近被访问的10个Key
上面代码使用object命令查找每个Key的最近被访问时间,使用sorted函数将这些Key按照访问时间排序,取最近被访问的10个Key。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
memcached和redis的区别
medis与Memcached的区别传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。 与MySQL数据库数据一致性问题。 数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。 4.跨机房cache同步问题。 众多NoSQL百花齐放,如何选择 最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题 1.少量数据存储,高速读写访问。 此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。 2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。 3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。 前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo Log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。 free,auto-sharding等。 比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。 面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。 Redis适用场景,如何正确的使用 前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 2Redis支持数据的备份,即master-slave模式的数据备份。 3Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。 在Redis中,并不是所有的数据都一直存储在内存中的。 这是和Memcached相比一个最大的区别。 Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。 然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。 这种特性使得Redis可以 保持超过其机器本身内存大小的数据。 当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。 同时由于Redis将内存 中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个 操作,直到子线程完成swap操作后才可以进行修改。 使用Redis特有内存模型前后的情况对比: VM off: 300k keys, 4096 bytes values: 1.3G used VM on:300k keys, 4096 bytes values: 73M used VM off: 1 million keys, 256 bytes values: 430.12M used VM on:1 million keys, 256 bytes values: 160.09M used VM on:1 million keys, values as large as you want, still: 160.09M used当 从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。 在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。 这种策略在客户端的数量较小,进行 批量操作的时候比较合适。 但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。 所以Redis运行我们设置I/O线程 池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。 如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。
你知道光线飞车什么时间可以激活游戏吗?
飞车12月9号就关了激活也要等换代理或是续合同后的事
电脑开机进不了系统
电脑启动时发生死机故障,可以分为开机自检是发生死机和载入操作系统时发生死机两种。 针对电脑自检时死机故障的具体检修方法如下。 (1) 首先确定电脑发生故障前的情况,如果电脑是在搬移之后发生死机,可能是电脑在移动过程中受到很大震动,致使电脑内部的部件松动而接触不良造成死机。 打开机箱把内存,显卡等设备重新紧固即可。 (2) 如果电脑是在升级BIOS程序之后发生死机无法启动,则可能是BIOS程序升级失败或升级的BIOS程序文件与电脑硬件不兼容,使用原来的BIOS程序文件恢复即可。 (3) 如果电脑是在设置BIOS程序之后发生死机无法启动,将设置过的BIOS设置修改回来或用BIOS程序中的“LOAD BIOS DEFAULTS(载入标准预设置)”选项,将BIOS程序恢复即可。 (4) 如果电脑是在CPU超频或升级之后死机无法启动,可能是由于CPU超频或升级引起的电脑死机,将CPU频率恢复正常频率或恢复到升级前的状态即可。 (5) 如果开机启动时,显示器屏幕提示“Keyboard Error(键盘错误)”或“Hard disk install failure(硬盘安装失败)”等说明相关设备没有接好或损坏,重新连接或更换故障设备即可。 (6) 如果屏幕提示“Disk Boot Failure(无效的启动盘)”,则是系统文件丢失或损坏,或硬盘分区表损坏,修复系统文件或恢复硬盘分区表即可。 (7) 如果不是上述问题,接着检查机箱内是否干净,因为灰尘腐蚀电脑电路及接口会造成设备间接触不良,引起死机,所以清洁灰尘及设备接口,有关灰尘造成的故障即可排除。 (8) 如果故障没有排除,最后用替换法排除硬件设备兼容性问题及质量问题。 针对电脑载入操作系统时发生死机故障的检修方法如下。 (1) 首先根据显示的错误提示进行判断。 如果启动时提示系统文件找不见,则可能是系统文件丢失或损坏。 维修时可以从其他相同操系统的电脑中复制丢失的文件到故障电脑中(有的系统文件不通用)。 (2) 如启动时出现蓝屏,提示系统文件找不到指定的文件,则为硬盘坏道导致电脑无法读取系统文件所致。 用启动盘启动电脑,运行“Scandisk”磁盘扫描程序,检测并修复硬盘坏道即可。 (3) 如果没有上述故障,首先用杀毒软件查杀病毒,然后用“安全模式”启动电脑。 如果不能启动,则可能主要是系统文件损坏,重新安装操作系统。 (4) 如果用“安全模式”可以启动电脑,接着再退出重新启动系统,看是否死机。 (5) 如果依旧死机,接着用备份的Windows注册表恢复系统(如系统不能启动,则用启动盘),恢复后看是否正常。 (6) 如果还死机,接着进入“安全模式”,打开“开始/运行”对话框,输入sfc并按Enter键,启动“系统文件检查器”,开始检测系统,如查出错误,屏幕会提示具体损坏文件的名称和路径,接着插入系统光盘,选“还原文件”命令,被损失或丢失的文件将会被还原。 (7) 最后如果系统依然死机,则重新安装操作系统。 无法启动操作系统各种的诊断方法如下。 首先检查开机时,电脑是否已经开始启动操作系统。 如果在启动操作系统时死机、蓝屏或自动重启,则说明硬盘的分区表及主引导记录正常,排除硬盘分区表损坏、硬盘主引导记录损坏、硬盘分区结束标志丢失等故障原因。 接着用下面的方法进行诊断。 第1步:首先用安全模式启动电脑,看是否能启动,如果不能启动,则可能是感染病毒、系统文件丢失、操作系统损坏、硬盘有坏道、硬件设备有冲突或硬件有问题,转至第4步;如果能启动安全模式,则可能是硬件驱动与系统不兼容、操作系统有问题或感染病毒等引起的。 第2步:接着运行杀毒软件,如果有病毒,则可能是病毒引起的,杀毒后重新启动电脑,如果还不正常,则需重新安装操作系统。 第3步:如果没有检测到病毒,可以使用操作系统自带的“系统还原”功能,将系统还原,还原后如果系统正常,故障则是由系统损坏而引起的。 如果故障依旧,则可能是设备驱动程序与系统不兼容引起的;接着将声卡、显卡、网卡等设备的驱动程序删除,然后再逐一安装驱动程序,每安装一个设备就重启一次电脑,来检查是哪个设备的驱动程序引起的故障,查出来后,下载故障设备的新版驱动程序,然后安装即可。 第4步:如果不能从安全模式启动,接着用安装光盘重新安装操作系统。 如果可以正常安装操作系统,转7步;如果安装操作系统时出现故障,如死机、蓝屏、重启等导致无法安装系统,则应该是硬件有问题或硬件接触不良引起的。 第5步:接着清洁电脑中的灰尘,清洁内存、显卡等设备金手指,重新安装内存等设备,然后再重新安装操作系统,如果能够正常安装系统,则是接触不良引起的故障。 第6步:如果还是无法安装系统,则可能是硬件问题引起的故障。 接着用替换法检查硬件故障,找到后更换硬件即可。 第7步:如果可以正常安装操作系统,且安装后故障消失,则是系统文件损坏引起的故障。 第8步:如果安装操作系统后,故障依旧,则可能是硬盘有坏道引起的或设备驱动程序与系统不兼容等引起的。 用安全模式启动电脑,如果不能启动,则是硬盘有坏道引起的故障。 接着用NDD磁盘工具修复坏道即可。 第9步:如果能启动安全模式,则是设备驱动程序与系统不兼容引起的。 接着将声卡、显卡、网卡等设备删除,然后再逐一安装驱动程序,安装一个启动一次,来检查是哪个设备的驱动程序引起的故障。 查出来后,下载故障设备的新版驱动程序,然后安装即可。 插拔一下内存、显卡,擦亮它们的金手指试试
发表评论