非关系型数据库redis介绍及与MySQL对比

非关系型数据库redis介绍及与MySQL对比

redis简介
redis是一个非关系型数据库,在内存中存储数据。

关系型数据库:维护了属性和属性值的关系,表和表之间的关系。如MySQL。
非关系型数据库:不以表的形式去存放数据,以键值对(key-value)的形式去存储。如redis。

redis中的key-value:
key不重复,value可以存储5种数据结构

  • String:一字符串的形式存数据
  • List:存储的数据保证有序
  • Set:保证数据不重复
  • Zset:排序的Set,存储的数据不重复,且有序
  • Hash:存储Map型数据,相当于Map

命令大全:http://doc.redisfans.com/
基本操作:https://blog.csdn.net/ruyulin/article/details/80834083?tdsourcetag=s_pcqq_aiomsg
Java操作redis:https://blog.csdn.net/weixin_45216439/article/list/2?

什么时候用MySQL,什么时候用redis?

  • redis的数据存在缓存(内存)中,不需要文件IO,即不需要访问磁盘,所以访问数据速度快。
    存储的数据状态变化的很快,而且是单次使用,不需要长期存储(永久保存)
    例如:网吧管理系统中机位的状态(已被人使用还是未使用),这个状态不需要永久保存(我不需要知道某个机位在以前的某某时间有没有人占用,只关注现在有没有人占用),这时就要用到redis。
  • MySQL的数据存在文件中,需要文件IO,比较耗时,但可以长期保存数据。
    1.当需要存的数据具有复杂的结构(比如用户信息包括id、姓名、年龄等),使用MySQL。
    2.当存储的数据需要维护表与表之间的关系(如student表和sc表)时,用MySQL。
    3.当存储的数据需要永久保存(如登陆时用到的用户id和密码password)时,用MySQL。
  • MySQL和redis配合使用:当要存储的信息需要永久保存,而每次访问时只访问其中的一部分,就可以把所有数据存在MySQL中,然后每次把要访问的一部分数据放在redis中。
    例如:答题系统需要把海量真题存储在MySQL中长期保存,然后每次系统启动从MySQL中挑100道题放在redis中,每次有人答题就从redis中的100道题中随机抽取10道。

使用redis时,数据结构如何选择?
原则上尽可能选择简单合适的数据结构:

  • 比如答题状态(未答、正在答、已答完),value存可能取三种值得String字符串就可以,不需要更复杂的数据结构;key用来存储考生id。
  • List按插入顺序存储,更新的新闻就可以用List存,更新的早就存的早;key用来存储新闻类型,比如娱乐类。
  • Set:王者游戏中,队友的信息可以用Set存,然后展示在游戏界面,因为队友不重复;key用来存储对局id。
  • Zset:游戏排行榜,需要展示出玩家的排名,而且玩家不重复,就需要用value存储;key用来存储排行榜类型,比如排位榜、巅峰赛榜。
  • Hash:类似于key1, value1(key2,value2)的形式。key1用来存储考试批次,value1存储试卷,而试卷又包括很多题目,题目需要题号和题目内容来标识,所以就在value1中存题号(key1)和题目内容(value2),这样就可以存储每场考试的试卷内容。

你可能感兴趣的:(redis)