一、概念
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持久化方式
- 快照(snapshotting,RDB)
Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis主从结构,主要用来提高Redis性能),还可以将快照留在原地以便重启服务器的时候使用。 - 只追加文件(append-only file,AOF)
通常情况下redis是没有开启该方法的,可以通过appendonly参数开启
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还会放慢速度以便适应硬盘的最大写入。