首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

怎么把mysql的数据缓存进redis

发布网友 发布时间:2022-04-23 14:22

我来回答

2个回答

懂视网 时间:2022-04-30 11:39

,保存为data.txt

    然后使用 redis的客户端 redis-cli的管道传输(redis的版本要大于2.6)

      linux下使用命令:

         cat data.txt | redis-cli --pipe

      成功的话就会出现如下结果:

      All data transferred. Waiting for the last reply...

      Last reply received from server.

      errors: 0, replies: 3

2. 使用符合redis协议格式的数据

       虽然第一种方法比较方便,不过存在的问题是,有时redis无法正确解释数据,所有推荐的第二种方式

       此协议数据的格式如下: 

*3<cr><lf>
$3<cr><lf>
SET<cr><lf>
$3<cr><lf>
key<cr><lf>
$5<cr><lf>
value<cr><lf>

  意义如下:

       第一行: *3<cr><lf> : 星号*是规定格式;3是参数的个数(如上:SET、key、value) ;<cr>是‘ ‘; <lf>是‘ ‘。

       第二、三行: $3<cr><lf>  : $是规定格式;3是对应命令SET的长度(3个字母);<cr><lf>同上

    所以上述格式又可写成:

*3
$3
SET
$3
key
$5
value
 

 

3. 使用mysql一次性导入大量数据的原理是一样的

       将数据按上述协议的格式导出来,然后再通过redis-cli --pipe导入

    例子: 

       建表语句:

CREATE TABLE `device_type` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(200) NOT NULL,
 `class` varchar(500) NOT NULL,
 `class_guid` varchar(500) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_name` (`name`),
 KEY `idx_class` (`class`(50),`class_guid`(200))
) ENGINE=MyISAM AUTO_INCREMENT=287 DEFAULT CHARSET=utf8;
SELECT * FROM drivers_lookup_com.driver_files;

  导出数据并转换成redis-cli能处理的格式:

SELECT CONCAT(
 "*8
",
 ‘$‘,LENGTH(redis_cmd),‘
‘,redis_cmd,‘
‘,
 ‘$‘,LENGTH(redis_key),‘
‘,redis_key,‘
‘,
 ‘$‘,LENGTH(hkey1),‘
‘,hkey1,‘
‘,‘$‘,LENGTH(hval1),‘
‘,hval1,‘
‘
 ‘$‘,LENGTH(hkey2),‘
‘,hkey2,‘
‘,‘$‘,LENGTH(hval2),‘
‘,hval2,‘
‘
 ‘$‘,LENGTH(hkey3),‘
‘,hkey3,‘
‘,‘$‘,LENGTH(hval3),‘
‘,hval3,‘
‘
)FROM(
 SELECT ‘HMSET‘ AS redis_cmd,
 id AS redis_key,
 ‘name‘ AS hkey1, name AS hval1,
 ‘class‘ AS hkey2,class AS hval2,
 ‘class_guid‘ AS hkey3,class_guid AS hval3
 From device_type
)AS t

  转换的命令如下:

 mysql -h192.168.0.104 -uroot -p123 device --skip-column-names --raw < device.sql | src/redis-cli --pipe

  

 

MySQL导数据到Redis

标签:

热心网友 时间:2022-04-30 08:47

1,redis是一种内存性的数据存储服务,所以它的速度要比mysql快。
2,redis只支持String,hashmap,set,sortedset等基本数据类型,但是不支持联合查询,所以它适合做缓存。
3,有时候缓存的数据量非常大,如果这个时候服务宕机了,且开启了redis的持久化功能,重新启动服务,数据基本上不会丢。
4,redis可以做内存共享,因为它可以被多个不同的客户端连接。
5,做为mysql等数据库的缓存,是把部分热点数据先存储到redis中,或第一次用的时候加载到redis中,下次再用的时候,直接从redis中取。
6,redis中的数据可以设置过期时间expire,如果这个数据在一定时间内没有被延长这个时间,那个一定时间之后这个数据就会从redis清除。

所以,redis只是用来缓存数据库中经常被访问的数据,可以增加访问速度和并发量。而mysql只是提供一种数据备份和数据源的作用。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com