Redis应用
Redis缓存数据库
为什么使用Redis?
1.经常使用到读操作,而在短时间内不经常变更的数据我们会使用Redis进行存储,目的就是减少频繁访问数据库的压力,增强用户体验
2.Redis使用起来简单灵活,支持多种数据结构,以纯内存方式进行数据存储,大大提高了读写效率
怎么使用Redis?
一.熟悉Redis的API
redis命令参考大全(很直观明了):http://doc.redisfans.com/
二.选用合适的数据结构
1. string(字符串)
string是最简单的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
2. list(双向链表)
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。之所以说它是双向的,因为它可以在链表左,右两边分别操作
3.dict(hash表)
set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字
4.zset(排序set)
zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。 可以对指定键的值进行排序权重的设定,它应用排名模块比较多
5.Hash类型
Redis能够存储key对多个属性的数据(比如user1.uname user1.passwd),当然,你完成可以把这些属性以json格式进行存储,直接把它当作string类型进行操作,但这样性能上是对影响的,所以redis提出的Hash类型。
eg.网关系统使用Redis存储连接记录(redisConnectionKey,Map(ip_client.hashCode,time)),计时器等等
三.redis和mysql数据保持一致性
提示:1.左边查询Redis很容易理解,先查Redis,有数据则返回给用户,没有就去查数据库,更新Redis(下次查的话就直接插Redis),然后再把数据返回给用户
2.右边是更新操作,更新操作一般不会直接更新Redis(但是也有人会这么做,万一更新Redis后更新库失败,下次别人查Redis就是脏数据了,一切必须以数据库为主),更新数据库前可以去清空Redis,可以减少读脏的几率(在许多人看来这一步是多余的,仔细想想确实能减少读脏的几率,也确实显得有些多余,所以我用了虚线表示,具体也看不同的业务场景,如果对一致性要求比较高的话可以这么做),后面清空Redis是为了下次查询的时候去查库,然后再更新Redis(有人在更新完库后不是清空Redis,而是直接更新Redis,这也是可取的,但是会带来一个问题,如果更新完Redis后这部分数据很长一段时间内没有人去查,会不会很占内存呢?),总之,不同的业务场景有不同的用法,如果是面试时被问到,能自圆其说即可!!!