Redis的数据类型:
Redis的经典数据类型有5种:string /hash /list /set /z-set。
- 在java语言中的简单数据类型,在Redis中对应的都是string。
另外,还包括:bitmap /hyperloglog /GEO /流(后续版本推出)
Redis中的list类型:
在Redis中,list类型的数据是一个先进后出、后进先出的栈结构。
使用Redis时的数据一致性问题:
1.在开发实践中,数据最终肯定是保存在关系型数据库中,(例如MySQL等),同时,为了提高查询效率,保护关系型数据库,通常会将某些数据从关系型数据库中读出来,并写入到Redis中,后续,将优先从Redis中读取数据。
2.由于关系型数据库和Redis都存储了数据,如果某个数据需要修改,最终修改的肯定是关系型数据库中的数据。但是,如果Redis中的数据没有及时更新,却仍从Redis中读取数据,则读取到的数据就是“不准确的”!
3.当同一个数据在多个不同的位置存储了多份,就可能出现以上问题,通常称之为“数据一致性”的问题,即2个或多个不同的存储位置,本应该“相同”的数据其实“并不相同”。
4.关于数据一致性问题:
(1)并不一定有必要及时更新数据,例如:MySQL中的数据发生了变化,但是Redis中却不更新,此时,数据并不一致,但是,对于软件的使用可能没有严重影响。
- 例如:热门视频的播放次数、热门资讯的浏览次数;
- 例如:购买火车票,列表页面中显示的各车次的余票数量;
(2)某些数据的更新频率可能非常低,这类数据基本上没有数据一致性问题。
- 例如:全国省市区数据;
(3)不是所有数据都适合在Redis中也存一份,对于访问频率非常低的数据,或数据量也别打的数据,可以不使用Redis。
- 例如:用户3年前的历史订单;
5.Redis解决数据一致性问题的做法:
- 即使更新:当关系型数据库的数据发生变化,马上更新Redis中的数据,保证数据的实时一致性;
- 周期性更新:当关系型数据库的数据发生变化,并不马上更新,每间隔一段时间或者到了某个指定的时间时,执行1次同步数据的操作,保证数据的最终一致性;
- 手动更新:当关系型数据库的数据发生变化,并不马上更新,有运营维护人员执行更新操作,进行更新数据,保证数据的最终一致性;
- 无论哪种更新,保证的都是数据的最终一致性;