redis存储关系性数据库数据

    最近公司数据库内存占用比较高,一直在着手寻找解决方案。虽然大家都知道系统架构有很多不合理的地方,但是我们是金融公司,系统庞大,业务牵扯繁多,大家都不敢轻易对系统动大手术。

    最后决定先给数据库中常用的一些静态表先加一层缓存。抛开数据库优化配置不说,数据库访问量下来了,内存肯定也不会高到哪里去。

    因为这里缓存以后会存储更多需要精细化控制的表信息,而且结合分布式场景的需要,所以选择redis来存储,而不是简单的选择mybatis的二级缓存。

    那么问题来了,怎么将数据库的信息,存到redis且又方便查询呢?

id name age date

1  zzy  18  2017

    因为场景的需求至少是根据表任意字段组合查询的,所以在选redis数据结构的时候就需要支持模糊查询。那么就只有选String数据结构了,用keys()这个函数就可以模糊查询了,这里模糊查询其实只是正则表达式匹配。

    user:id:1:name:zzy:age:18:date:2017作为key,value就是你整个数据内容了。        keys(user:*age:18*),这样就可以查询user表中age=18的数据了,拿到value就随便你怎么搞了。

    redsi的持久化,这里不需要,每次启动程序都重新加在最新的数据到cache。

    查询数据时,查询方直接连接redis查,查不到数据时再去查数据库。但是如果你查数据库没有的数据,访问会一直穿透到数据库,redis不起作用。但是别怕,你可以把没查到的数据也记录到redis,给个过期时间,至少可以过滤大量这种操作对数据库的访问。

    为了统一管理,数据的增删改都调用服务。前面先加数据库,后面再加cache,至少在调用添加服务失败时,数据库的也会因为异常而回滚。这个操作redis的服务是需要部署多机的,为了避免程序启动时重复的去加载数据库,重复的去和redis数据做对比。这里考虑了用zookeeper选举的这一特性,在zookeeper同一目录上去注册监听,谁先注册上,谁就拥有权利去加在数据库。

时间: 2025-01-11 12:24:31

redis存储关系性数据库数据的相关文章

类似12306账号中的常用联系人这种不定长的数据是怎么存储的?数据库是如何建的?求指教

问题描述 类似12306账号中的常用联系人这种不定长的数据是怎么存储的?数据库是如何建的?求指教 类似12306账号中的常用联系人.论坛回复 这种不定长的数据是怎么存储的 解决方案 就这个网站来说,应该很少存在Unicode类型的数据,如果你真担心会有多语言的数据,比如维语.繁体中文等,可以用nvarchar类型存储.一般如果仅展示,那么以逗号或者其他符号分割每个联系人,然后以一列的形式存储即可,如果还需要做互动操作,建议创建一个关系表,存放当前人员和联系人的关系,通常是两列,一列是当前人员的主

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据            Redis简介            Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案.            Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器.           

从分析性数据库ADS中导出数据

ADS是阿里云提供的分析性数据库,实现百亿数据毫秒级计算. 将ADS中的数据导出,有2种思路,通过select或dump实现.这两种方法各有优缺点. select导出 因为ADS支持MySQL客户端,通过客户端,可以编写select进行数据导入. 在这个过程中需要解决1个问题: select在公共云上查询的返回行数最大为10000行,所以无法通过select无法一次获取所有的数据 如果想通过分区的方式,分多次,一次10000行将数据导出,需要解决分区的问题: limit语法只支持[0,n],不支

详解Android数据存储之SQLCipher数据库加密_Android

前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录下,对于已经ROOT的手机来说的没有任何安全性可以,一旦被利用将会导致数据库数据的泄漏,所以我们该如何避免这种事情的发生呢?我们尝试这对数据库进行加密. 选择加密方案:  1.)第一种方案  我们可以对数据的数据库名,表名,列名就行md5,对存储的数据进行加密,例如进行aes加密(Android数据

详解Android数据存储—使用SQLite数据库

SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. SQLite数据库文件被保存在/data/data/package_name/databases目录下. 一.创建和删除表 1.创建表 创建表的SQL语句为: CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, na

详解Android数据存储之SQLCipher数据库加密

前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录下,对于已经ROOT的手机来说的没有任何安全性可以,一旦被利用将会导致数据库数据的泄漏,所以我们该如何避免这种事情的发生呢?我们尝试这对数据库进行加密. 选择加密方案: 1.)第一种方案 我们可以对数据的数据库名,表名,列名就行md5,对存储的数据进行加密,例如进行aes加密(Android数据加密

存储:迈向大数据时代的最佳媒介

文章讲的是存储:迈向大数据时代的最佳媒介,虽然中国大数据市场还处在初级阶段,但增速非常迅猛,应用也极其广泛,不管是云计算.物联网.智慧城市还是移动互联都要与大数据扯上关系.都说未来是数据为王的时代,大数据应用将会越来越广泛的落地在各个领域,大数据绝对是企业未来实现业务突破的重点.那么,到底大数据和存储有什么样的关系呢? 三大点囊括大数据需求 大数据就是大量的数据,人们用它来描述和定义信息爆炸时代产生的海量数大数据时代来临.那么,大数据到底有多大?有资料显示,一天之中,互联网产生的全部内容可以刻满

oracle库存储问题导致数据库重启后无法正常启动恢复教程

某客户的核心数据库存储问题导致数据库重启后无法正常启动,根据客户反馈最开始在启动数据库时 报错控制文件IO错误,如下: Sun Mar 15 11:59:37 2015 Errors in file /oracle/app1/oracle/admin/xxxx/bdump/xxxx2_arc1_630876.trc: ORA-00204: error in reading (block 1, # blocks 1) of control file ORA-00202: control file:

tinkerpop(2) 使用java调用tinkerpop,存储到derby数据库

1,关于tinkerpop 本文原文连接: http://blog.csdn.net/freewebsys/article/details/46470651 转载请注明出处! 之前体验了下tinkerpop的console服务. 存储数据,然后进行查询数据. 之前写的文章: http://blog.csdn.net/freewebsys/article/details/46348975 2,关于blueprints Blueprints是一组针对属性图数据模型的接口.实现.测试套件,有些类似于J