mysql 键值存储_键值存储之redis

MySQL通过Memcached将热点数据加载到cache,加速访问,但随着业务数据量的不断增加,和访问量的持续增长会遇到很多问题:

1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。

2.Memcached与MySQL数据库数据一致性问题。

3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。

4.跨机房cache同步问题。

如果简单地比较Redis与Memcached的区别,redis会有如下优点:

1  Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

2  Redis支持数据的备份,即master-slave模式的数据备份。

3  Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

下面简单的对redis进行实验,参考“www.runoob.com/redis”

安装:

#tar zxf redis-3.0.2.tar.gz

#cd redis-3.0.2

#yum install jemalloc-3.6.0-1.el6 jemalloc-devel-3.6.0-1.el6 gcc -y  //安装插件

#make && make install

#cd utils/

#./install_server_sh   //配置redis,选择默认即可

#service redis_6379 start   //启动redis服务

#redis-cli     //客户端命令行工具,可以对数据库和各种数据类型进行操作

set myKey abc   //设置键值对

get myKey      //取出键值对

config get loglevel  //查看配置项loglevel

fed53cdc5ff0e0eea50c4674bd6a7b09.png

将redis作为mysql的缓存服务器

安装lnmp环境

#yum install -y nginx-1.8.0.1.el6.ngx.x86_64.rpm php-5.3.3-38.el6.x86_64 php-cli-5.3.3-38.el6 php-common php-devel php-fpm php-gd php-mbstring php-mysql  php-pdo   //安装nginx,php,在web上显示redis缓存的mysql数据。

#vim /etc/php.ini

修改时区为亚洲上海

#vim /etc/php-fpm.d/www.conf

设置uer与group为nginx。

#/etc/init.d/php-fpm start      //启动phpfastcgi

#cd /usr/share/nginx/html

#vim index.php

$redis = new Redis();

$redis->connect('127.0.0.1',6379) or die ("could net connect redis server");

#      $query = "select * from test limit 9";

$query = "select * from test";

for ($key = 1; $key 

{

if (!$redis->get($key))

{

$connect = mysql_connect('127.0.0.1','redis','westos');

mysql_select_db(test);

$result = mysql_query($query);

//如果没有找到$key,就将该查询sql的结果缓存到redis

while ($row = mysql_fetch_assoc($result))

{

$redis->set($row['id'],$row['name']);

}

$myserver = 'mysql';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 Redis 中的数据转存到 MySQL 中,你可以使用 Java 编写一个程序来实现。下面是一个简单的示例代码,供你参考: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.ScanParams; import redis.clients.jedis.ScanResult; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Map; public class RedisToMysql { public static void main(String[] args) { // Redis 连接参数 String redisHost = "localhost"; int redisPort = 6379; String redisPassword = "your_redis_password"; int redisDbIndex = 0; // MySQL 连接参数 String mysqlHost = "localhost"; int mysqlPort = 3306; String mysqlDatabase = "your_database_name"; String mysqlUsername = "your_mysql_username"; String mysqlPassword = "your_mysql_password"; // 连接 Redis Jedis jedis = new Jedis(redisHost, redisPort); jedis.auth(redisPassword); jedis.select(redisDbIndex); // 连接 MySQL try (Connection conn = DriverManager.getConnection("jdbc:mysql://" + mysqlHost + ":" + mysqlPort + "/" + mysqlDatabase, mysqlUsername, mysqlPassword)) { // 遍历 Redis 中的所有 ScanParams scanParams = new ScanParams().match("*"); ScanResult<String> scanResult; String cursor = "0"; do { scanResult = jedis.scan(cursor, scanParams); for (String key : scanResult.getResult()) { // 从 Redis 获取数据 Map<String, String> redisData = jedis.hgetAll(key); // 将数据插入到 MySQL String sql = "INSERT INTO your_table_name (key, field, value) VALUES (?, ?, ?)"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { for (Map.Entry<String, String> entry : redisData.entrySet()) { stmt.setString(1, key); stmt.setString(2, entry.getKey()); stmt.setString(3, entry.getValue()); stmt.executeUpdate(); } } } cursor = scanResult.getStringCursor(); } while (!cursor.equals("0")); System.out.println("Data transfer completed!"); } catch (SQLException e) { e.printStackTrace(); } finally { jedis.close(); } } } ``` 请根据你的实际情况修改示例代码中的 RedisMySQL 连接参数,以及 MySQL 表名等信息。这段代码将遍历 Redis 中的所有,将对数据插入到 MySQL 的指定表中。你还可以根据实际需求进行进一步的优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值