[Database] Redis 随笔

Redis 随笔

1. 特色

  • 非关系数据库 non-relational database
  • 内存数据库
  • 高性能
  • 主从复制
  • 可持久化存储
  • 发布与订阅
  • 支持脚本

2. 数据类型5种

STRING

  • 能够是字符串、整数、浮点数
  • 操做
    • 对整个字符串或都字符串的一部分执行操做;
    • 对整数或浮点数执行自增或自减操做;

LIST

  • 链表,每一个节点都包含一个字符串
  • 操做
    • 从链表两端推入或弹出元素;
    • 依据偏移量对链表进行修剪(trim);
    • 读取单个或者多个元素;
    • 依据值查找或移动元素;

SET

  • 包含字符串的无序收集器,而且各字符串独一无2、各不相同
  • 操做
    • 添加、获取、移除单个元素;
    • 检查一个元素是否存在于集合中;
    • 计算交集、并集、差集;
    • 从集合里面随机获取元素;

HASH

  • 包含键值对的无序散列表
  • 操做
    • 添加、获取、移除单个键值对;
    • 获取全部键值对;

ZSET

  • 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定
  • 操做
    • 添加、获取、删除单个元素;
    • 依据分值范围或者成员来获取元素

3. 命令

基本事务 transaction

  • MULTI
  • EXEC
  • UNWATCH
  • WATCH
  • DISCARD

4. 数据安全与性能保障

持久化

  • 快照 snapshotting
    • 将存在于某一时刻的全部数据都写入硬盘里面
    • 操做
      • 执行 BGSAVE
      • 执行 SAVE
      • 配置选项 save 60 10000 ; 能够多个条件,条件知足时执行一次BGSAVE
      • 收到SHUTDOWN 或 TERM信号时,会执行SAVE
      • 一个Redis链接另外一个Redis 服务器,并发送SYNC 开始复制时,主服务器非刚执行完BGSAVE操做,就会执行BGSAVE
  • AOF 只追加文件 append-only file
    • AOF 持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化。
    • 重写/压缩AOF文件
      • 执行命令 BGREWRITEAOF
      • 设置选项
        • auto-aof-rewrite-min-size
        • auto-aof-rewrite-percentage

复制 replication

  • 让其余服务器拥有一个不断更新的数据副本,从而使拥有副本的服务器能够用于处理客户端发送的读请求。
  • slaveof host port
  • slaveof no one
  • 主从链
  • 检验硬盘写入
    • INFO命令输出结果aof_pending_bio_fsync 属性的值是否为0
  • 验证快照文件和AOF文件
    • redis-check-aof
    • redis-check-dump

事务

  • 事务型流水线
    • PyRedis
      • conn.pipeline()
      • conn.multi *** conn.exec
  • 非事务性流水线
    • PyRedis
      • conn.pipeline(False)

性能测试工具

  • reids-benchmark

分布式锁

Redis使用WATCH命令来代替对数据进行加锁,由于WATCH只会在数据被其余客户端抢先修改了的状况下通知执行了这个命令的客户端,而不会阻止其余客户端对数所进行修改,因此这个命令被称为乐观锁(optimistic locking)html

发布、订阅

publish、subscriberedis


下降内存占用

短结构

Redis 为列表、集合、散列和有序集合提供了一组配置选项,可让Redis以更节约空间的方式存储长度较短的结构。算法

在列表、散列、有序集合的长度较短或者体积较小的时候,Redis能够选择使用和种名为压缩列表(ziplist)的紧凑存储方式来存储这些结构。压缩列表以序列化的方式存储数据,这些数据每次被读取的时候都要进行解码,每次被写入的时候也要进行局部的从新编码,而且可能须要对内存里面的数据进行移动。数据库

通常压缩列表的长度限制在 1024 个之内,每一个元素体积不能超过 64字节,通常能同时兼顾内存占用和高性能这两方面优势。缓存

配置使用

* list-max-ziplist-entries  512  #容许包含的最大元素数
* list-max-ziplist-value    64   #每一个节点最大致积是多少个字节
* hash-max-ziplist-entries  512
* hash-max-ziplist-value    64
* zset-max-ziplist-entries  128
* zset-max-ziplist-value    64
* set-max-intset-entries    512

分片结构 sharding

  • 经过哈希环等算法,把列表、集合、散列分布到多处存储,来减少元素数,从而使用压缩列表减小内存占用。
  • 打包存储二进制位和字节
  • 对于简短而且长度固定的连续ID,能够用分片Redis字符串去存储。

扩展Redis

  • 增长从服务器
  • 使从服务器可写
  • slave-read-only安全

  • 分片扩展写性能和内存容量服务器


解决实用案例

  • Web 登陆缓存
  • 购物车
  • 网页缓存
  • 数据行缓存
  • 基于搜索的应用
  • 定向广告
  • 社交网站

相关连接:
Redis 1
Redis 2并发

XMIND:
app

相关文章
相关标签/搜索