如何取出大数据量的 redis hash 结构的数据并遍历导出

如何取出大数据量的 redis hash 结构的数据并遍历导出,第1张

就看你的数据量大小了,如果太大,却是不好遍历,如果有规则的key值的话,倒是可以利用分页的方式来处理,如果没有规律的话,只有用keys来取了,或者是通过keysa;keysz;keys1;keys0等通配符的方式来顺序的读取,读取时要把内存分配的大一些,不然容易溢出

可能是由于php版本导致的。

解决办法:

1删除redisso文件

2删除phpredis-master目录。

3重新安装Redis的PHP扩展。

Redis是一个主要由SalvatoreSanfilippo(Antirez)开发的开源内存数据结构存储器,经常用作数据库、缓存以及消息代理等。Redis不仅可以单机使用,还可以多机使用:通过Redis自带的复制、Sentinel和集群功能,用户可以将自己的数据库扩展至任意大小。

Redis-port导出文件很小该现象是一个正常的行为,在导出后应该注意的是Keys数量是否相同,而不是文件Size大小。

只要确认两个Redis库之间Keys数量基本一致。那就表明,没有数据丢失。可以在AzureRedis门户Overview页面,通过Console数据infokeyspace来查看当前库中所含Keys的数量。

关于压缩比的问题,因为导出功能是把Redis中的Key/Value生成RDB文件,这是Redis本身的行为,并不是Azure平台的特性功能。通过查看Redis的官方文档默认使用的是LZF压缩算法。

redis内存满了解决方法:

1,增加内存。

2,使用内存淘汰策略。

3,Redis集群。

重点介绍下2、3:

第二点:

我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节)。

那么当所需内存,超过maxmemory怎么办?

这个时候就该配置文件中的maxmemory-policy出场了。

其默认值是noeviction。

下面我将列出当可用内存不足时,删除redis键具有的淘汰规则。

规则说明:

1、volatile-lru

使用LRU算法删除一个键(只对设置了生存时间的键)

2、allkeys-lru

使用LRU算法删除一个键

3、volatile-random

随机删除一个键(只对设置了生存时间的键)

4、allkeys-random

随机删除一个键

5、volatile-ttl

删除生存时间最近的一个键

6、noeviction

不删除键,只返回错误

LRU算法,least RecentlyUsed,最近最少使用算法。也就是说默认删除最近最少使用的键。

但是一定要注意一点!redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。

那么3这个数字也是可以设置的,对应位置是配置文件中的maxmeory-samples

三、集群怎么做

Redis仅支持单实例,内存一般最多10~20GB。对于内存动辄100~200GB的系统,就需要通过集群来支持了。

Redis集群有三种方式:客户端分片、代理分片、RedisCluster(在之后一篇文章详细说一下。)

1、客户端分片

通过业务代码自己实现路由

优势:可以自己控制分片算法、性能比代理的好

劣势:维护成本高、扩容/缩容等运维 *** 作都需要自己研发

2、代理分片

代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。使用类似Twemproxy、Codis等中间件实现。

优势:运维方便、程序不用关心如何链接Redis实例

劣势:会带来性能消耗(大概20%)、无法平滑扩容/缩容,需要执行脚本迁移数据,不方便(Codis在Twemproxy基础上优化并实现了预分片来达到Auto Rebalance)。

3、Redis Cluster

优势:官方集群解决方案、无中心节点,和客户端直连,性能较好

劣势:方案太重、无法平滑扩容/缩容,需要执行相应的脚本,不方便、太新,没有相应成熟的解决案例

Redis的配置

daemonize 如果需要在后台运行,把该项改为yes

pidfile 配置多个pid的地址,默认在/var/run/redispid

bind 绑定ip,设置后只接受自该ip的请求

port 监听端口,默认为6379

timeout 设置客户端连接时的超时时间,单位为秒

loglevel 分为4级,debug、verbose、notice、warning

logfile 配置log文件地址

databases 设置数据库的个数,默认使用的数据库为0

save 设置redis进行数据库镜像的频率,保存快照的频率,第一个表示多长时间, 第三个表示执行多少次写 *** 作。在一定时间内执行一定数量的写 *** 作时,自动保存快照。可设置多个条件。

rdbcompression 在进行镜像备份时,是否进行压缩

Dbfilename 镜像备份文件的文件名

Dir 数据库镜像备份的文件放置路径

Slaveof 设置数据库为其他数据库的从数据库

Masterauth 主数据库连接需要的密码验证

Requirepass 设置登录时需要使用的密码

Maxclients 限制同时连接的客户数量

Maxmemory 设置redis能够使用的最大内存

Appendonly 开启append only模式

appendfsync 设置对appendonlyaof文件同步的频率

vm-enabled 是否虚拟内存的支持

vm-swap-file 设置虚拟内存的交换文件路径

vm-max-memory 设置redis使用的最大物理内存大小

vm-page-size 设置虚拟内存的页大小

vm-pages 设置交换文件的总page数量

vm-max-threads 设置VMIO同时使用的线程数量

glueoutputbuf 把小的输出缓存存放在一起

hash-max-zipmap-entries 设置hash的临界值

activerehashing 重新has

帮你找了一个工具,经测试可用:

安装和使用方法文档上写了,如果安装完成找不到rdb命令的话,直接在安装目录下执行也可以:

rdbtools/cli/rdbpy -c memory /path/to/your/dumprdb > resultcsv

以上就是关于如何取出大数据量的 redis hash 结构的数据并遍历导出全部的内容,包括:如何取出大数据量的 redis hash 结构的数据并遍历导出、用户无法将自己的Redis数据库扩展至任意大小、Redis-port导出文件很小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9304293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存