一、概念
redis:是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
二、数据类型以及基本使用
1.string
在redis中string其实并不是指字符串,它表示的是一种基本的数据类型,即一个key只能对应一个value。这里的key和value都是数组形式的,只不过key一般是由一个字符串转换成的byte数组,而value则是根据实际情况而定。需要注意是一个键值最大存储512MB。通常使用:微博数,粉丝数等。
在特定情况下,对 value 也会有一些要求,比如要进行自增或自减操作,那 value 对应的 byte 数组必须要能被解码成一个数字才行,否则会报错。
2.list
一个 key 可以对应多个 value,且 value 之间是有先后顺序的,value 值可以重复。通常使用:微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现。
3.set
一个 key 可以对应多个 value,且 value 之间是没有先后顺序的,value 值也不可以重复。通常使用:微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。
4.hash
一个 key 可以对应多个 key-value 对,此时这些 key-value 对之间的先后顺序一般意义不大,这是一个按照名称语义来访问的数据结构,而非位置语义。通常使用:存储用户信息,商品信息等。
5.Sorted Set
一个 key 可以对应多个 value,value 之间是有大小排序的,value 值不可以重复。每个 value 都和一个浮点数相关联,该浮点数叫 score。元素排序规则是:先按 score 排序,再按 value 排序。通常使用:直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
三、redis持久化机制
所谓持久化,就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了防止系统故障而将数据备份到一个远程位置。
1.redis持久化方式
appendonly yes
开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof。
在Redis的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no #让操作系统决定何时进行同步
为了兼顾数据和写入性能,用户可以考虑 appendfsync everysec选项 ,让redis每秒同步一次AOF文件,redis性能几乎没任何影响。而且这样即使出现系统崩溃,用户只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,redis还会放慢速度以便适应硬盘的最大写入。