我今天才知道redis还可以导入文件数据!

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 我今天才知道redis还可以导入文件数据!

redis是当前面试高频的一个板块,常见redis最热门的的话题就是缓存击穿、穿透、雪崩、主从复制原理等等,目前了不起针对redis有好多篇输出,可以直接查看相关redis合集去查看历史文章。

今天了不起带着问题来谈一谈redis批量插入的问题,带着大家一起学习一下redis批量插入数据。

事情是这样的,了不起最近有个项目中,某个需求的实现是每次操作前需要读取一个文件中的数据,并且初始化数据到redis中,用完后有的清除,有的保留。

这里有个需求点就是项目第一次上线需要批量的向redis中放入数据,实现方案可以是读取文件中的内容,然后由代码脚本来一条语句一条语句插入。

当然这样做也没什么问题,不过其实redis自身也是具备从文件中批量插入数据的功能,我们一起来看一看吧!

创建redis命令文件

redis读取的文件内容肯定是要符合redis语法的,所以我们可以将刚刚需求的文件内容进行转义,手动或者自动都是可以的,把它改写成redis命令文件。

server$ vim d1.txt
set myk12 v1
zadd zset12 0 a 1 b 3 c
sadd sset12 e f g hh
set myk22 v2
hset myset12 k1 v1
hmset myset22 k2 v2 k3 v3 k4 v4
set myk32 v3

只要符合redis客户端语法的都可以,把目标文件内容改程类似上面的格式。

转码

redis-cli客户端命令,只支持dos格式的换行符 \r\n

我们最好都转个码,没有转码的文件,执行会失败。转码指令是使用unix2dos,使用方法如下:

// 转码指令, 只需要在命令后加入要转码的文件即可:
server> unix2dos d1.txt 
unix2dos: converting file d1.txt to DOS format...

注意事项:如果使用unix2dos这个命令进行转码提示没有这个命令,就需要进行安装unix2dos转码工具。

在mac下用brew install unix2dos 安装的unix2dos转码工具

brew install unix2dos
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
... 部分省略 ...
==> Pouring dos2unix-7.3.4.sierra.bottle.tar.gz
/usr/local/Cellar/dos2unix/7.3.4: 23 files, 344.3K

如果是CentOS,使用unix2dos这个命令进行转码提示没有这个命令,用yum install unix2dos安装unix2dos转码工具。

yum install unix2dos
已加载插件:fastestmirror, security
... 部分省略 ...
已安装:
  unix2dos.x86_64 0:2.2-35.el6
完毕!

执行导入

待文件转码完成后,就可以开始导入数据了。

前置条件是redis服务已经正常启动并运行,这里不展开讲解redis如何启动。

导入使用cat和redis-cli命令组合,cat是用来读取文件内容,将文件内容读取到内存中,redis-cli用来发送文件到redis执行。

server> cat d1.txt | redis-cli 
OK
(integer) 3
(integer) 4
OK
(integer) 1
OK
OK

导入指令输出结果中可以看到每一行的返回记录和输出结果。

如果你导入的指令非常多,可以使用 --pipe 管道这个参数来启用pipe协议,它不仅能减少返回结果的输出,还能更快的执行指令,关于管道pipeline后面也会细讲。

server> cat d1.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7

如果你需要导入数据在远程主机上,而且端口也是自定义的,那么可以使用下面的命令将文件导入到远程服务器:

server> cat d1.txt | redis-cli -p 6379 -h 192.168.1.168 --pipe
All data transferred. Waiting for the last reply...  
Last reply received from server.  
errors: 0, replies: 7

数据导入完成后,去redis检查数据是否导入成功了:

server$ redis-cli -p 6380
127.0.0.1:6380> get myk1
"v1"
127.0.0.1:6380> hgetall myset1
1) "k1"
2) "v1"
127.0.0.1:6380> hgetall myset2
1) "k2"
2) "v2"
3) "k3"
4) "v3"
5) "k4"
6) "v4"

是不是非常的nice,以后redis中有什么数据要处理,直接一行命令搞定!

总结

都是初始化数据到redis,用代码和用这种方式哪个更加方便快捷相信大家心理有数了。

redis从文件中批量插入数据你学会了吗?

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
12天前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
45 16
|
1月前
|
监控 NoSQL Java
场景题:百万数据插入Redis有哪些实现方案?
场景题:百万数据插入Redis有哪些实现方案?
42 1
场景题:百万数据插入Redis有哪些实现方案?
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
|
12天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
47 14
|
12天前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
40 13
|
12天前
|
存储 NoSQL Redis
Redis的数据过期策略有哪些 ?
Redis 采用两种过期键删除策略:惰性删除和定期删除。惰性删除在读取键时检查是否过期并删除,对 CPU 友好但可能积压大量过期键。定期删除则定时抽样检查并删除过期键,对内存更友好。默认每秒扫描 10 次,每次检查 20 个键,若超过 25% 过期则继续检查,单次最大执行时间 25ms。两者结合使用以平衡性能和资源占用。
35 11
|
12天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
12天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
1月前
|
消息中间件 缓存 NoSQL
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
55 2