社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
本文日常更新,迟早会写完它
Redis要解决的问题:
关系型数据库的毛病:
解决思路:
于是就产生了Nosql:非关系型数据库,来作为关系型数据库的补充,应用于海量数据前提下的数据处理问题
应用场景:电商
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,有以下特征:
Redis的应用
初始阶段,我使用windows平台的3.2版本作为入门学习使用,后面再改用linux版本
Redis自身是一个map,其中所有的数据都是采用key-value的心事存储,数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串
最简单的数据类型,一个存储空间保存一个数据,如果字符串以整数或小数的形式展示,可以作为数字操作使用
基本操作:
添加修改数据
set key value
mset key1 value1 key2 value2 …
*讨论1
获取数据
get key
mget key1 key2 key3 …
删除数据(返回删除的key的个数)
del key1 key2 …
获取数据字符个数(失败则返回0)
strlen key
追加信息到原始信息后(如果有则追加,否则新建,返回值为总的长度)
append key value
string类型扩展操作
业务场景1:分表操作,就是说使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。Oracle数据库有sequence设定,那么不具类似操作的mysql该如何解决呢?
解决办法:使用Redis来提供主键生成策略,保障主键唯一性,此方案适用于所有数据库,且支持数据库集群。在Redis中有如下指令
设置数值数据增加指定范围的值
设置数值数据减少指定范围的值
tips:redis数值上限为Java中的Long.MAX_VALUE,超出上限范围或者原始数据不能转化为数值进行计算会报错
业务场景2:
解决方案:
string类型应用场景
业务场景: 高频访问信息显示控制,如微博大V主页显示粉丝数与微博数量
命名规范问题:
以用户主键和属性值作为key,后台设定定时刷新策略即可
还可以用json格式存储
数据库中热点数据key命名惯例:表明:主键名:主键值:字段名
tips:redis应用于各种结构型和非结构型高热度数据访问加速
讨论1:单数据操作与多数据操作的选择:
首先操作耗时为:发送(给redis)指令时间(st)+执行指令时间(et)+返回结果时间(rt)
假设要执行x条指令
单数据操作:发送x次,执行x次,返回x次,总耗时为 xst + xet + xrt
多数据操作:发送1次,执行x次,返回1次,总耗时为 st + xet + rt,(其实此处的st和rt其实应该比上一行的st和rt大一些,毕竟将x次要发送的数据糅合在一起发送肯定比分开发送时发送一条要久一点,但是影响不大,就忽略一下,当作相等。)
则由上述内容推出,单数剧操作的耗时 > 多数据操作的耗时,那么操作时改如何进行指令的选择呢,其实,应该就实际情况,比如x=50时,那么应该一次发50个比较好,但是如果x=10^8,也就是一亿条数据的时候呢,如果一起发的话,那么就会阻塞住,因为redis是单线程的,此时可以选择将一亿条数据分为100份,每次发送一百万条数据,也可以继续分割测量,看什么样的规模对性能影响最小。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!