缓存数据库:redis基础

缓存数据库:redis

  • redis是一个开源的key-value存储系统。与memcached类似,redis将大部分数据存储在内存中。redis支持的数据类型包括:字符串哈希表链表集合有序集合以及基于这些数据类型的相关操作
  • 可以作为内存型缓存服务器,提供持久化存储方案,可以作为结构不复杂的数据库使用。

redis和持久化数据库配合使用
在一些大型网站中常见到redis的身影配合其他RDBMS(关系型数据库管理系统)来使用
1.服务器先从缓存中拿数据
2.如果缓存中没有数据,先从将持久性数据库中保存到缓存中,再从缓冲中取
3.服务器需要保存数据,先保存在持久性数据库中,保存成功后,再给缓存同步一份
4.如果在持久性数据库保存数据失败,缓存则无需同步备份

redis优点

  • redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的
  • 操作都是原子的:所有 redis 的操作都是原子(所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它是最小的执行单位,不可能有比它更小的执行单位),从而确保当两个客户同时访问 redis 服务器得到的是更新后的值(最新值) 。
  • MultiUtility工具:redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用( redis原生支持发布/订阅) ,在应用程序中,如:Web应用程序会话、网站页面点击数等任何短暂的数据。
redis类型 含义
string 字符串
hash 字典
list 列表
set 集合
sorted set 有序集合
pub/sub 订阅

Transactions—事务

redis事务允许一组命令在单一步骤中执行。事务有两个属性:

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行(但是,如果事务中间某条命令执行返回错误,事务也不会回滚,而是继续执行剩余的命令)
  • redis 事务由指令 MULTI 发起的,之后传递需要在事务中和整个事务中,最后由 EXEC 命令执行所有命令的列表。
命令 解释
multi 标记一个事务块的开始。 随后的指令将在执行exec时作为一个原子执行
exec 执行事务中所有在排队等待的指令并将链接状态恢复到正常
discard 丢弃所有MULTI之后发的所有命令,同时事务也取消,需要重新multi

redis持久化

redis虽然是缓冲数据库,但也提供了持久化的方案。

备份数据

客户端敲save命令,即可创建当前 redis 数据库的备份,如果成功,自动在服务器启动所在目录生成dump.rdb文件(redis加密的文件内容)。可使用 config get dir命令查看 redis 服务器启动目录。

恢复数据

dump.rdb文件所在目录下,启动redis服务器,服务器自动会加载当前目录下的dump.rdb文件

RDB方式(默认)

RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。

命令 解释
save 900 1 900秒内至少有1个键被更改则进行快照
save 300 10 300秒内至少有10个键被更改则进行快照
save 60 10000 60秒内至少有10000个键被更改则进行快照

可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。如果想要禁用自动快照,只需要将所有的save参数删除即可。

可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名:

AOF方式

  • 默认情况下redis没有开启AOF*(append only file)方式的持久化,可以在*redis.conf中通过appendonly参数开启

  • 开启AOF持久化后每执行一条会更改redis中的数据的命令,redis就会将该命令写入硬盘中的AOF文件。在启动时redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些。

  • AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改

猜你喜欢

转载自blog.csdn.net/B_Nemo/article/details/80542550