redis开发与运维笔记

redis学习笔记

  • 执行流程 发送命令->命令排队->命令执行->返回结果

  • string类型有三种实现方式 如果是值是int类型,那么底层用int实现,
    短的字符串使用embstr:小于等于39byte,长的用raw实现:大于39byte

  • 哈希类型实现有两种,当哈希类型的元素小于512并且size小于64byte时
    使用ziplist实现,否则使用hashtable实现

  • 列表类型也有两种实现 第一种和哈希类型一样,第二种是链表实现,3.2以后提供了quicklist来实现

  • 集合使用intset 整数集合和hashtable实现 当元素全为int并且小于512个用前者
    ###典型使用场景

string:
1.缓存功能  一般使用redis作为缓存层 mysql作为存储层 
2.计数  比如视频播放量计数,访问接口统计 incr key
3.共享session 
4.限速  可以通过incr+expire 自增加过期来实现

hash:
可以用来复杂的用户信息

list:
1.可以做消息队列 通过lpush+brpop可实现阻塞队列,生产者从lrpush插入元素,
消费者客户端使用brpop从列表尾部拿取元素
2.文章列表  因为list是有序的
lpush+lpop=stack 栈
lpush+rpop=queue 队列
lpush+ltrim=campped collection 有限集合
lpush+brpop=message queue 消息队列

set:
比较典型的场景是为用户贴标签tag 
sadd 用来贴标签
srandmember可以生成随机数
sadd+sinter social graph 做社交

###迁移键

1.move move命令用于在redis内部进行数据迁移 move key db
2.dump key + restore key ttl value
    dump+restore可以实现不同的redis实例之间进行数据迁移
    1) 在源redis上 dump会将键值序列化 格式采用rdb格式
    2)在目标redis上 restore命令将上面序列化的值进行复原 
      其中ttl表示过期时间ttl=0 表示没有过期时间
3.migrate
    也是用于redis实例之间的数据迁移 实际就是将dump、restore和del命令进行组合

###redis持久化

redis支持rdb和aof两种持久化机制
1.rdb:
    rdb是将当前进程的数据生成快照保存到硬盘的过程,触发rdb持久化有手动触发和自动触发。
    手动触发分别对应sava和bgsava,前者会阻塞当前服务器,直到rdb完成 一般不使用
    bgsava会fork出一个子进程  rdb由子进程来完成 
    自动触发
    1)进行sava设置 sava m n 表示m秒内数据在n次修改自动触发bgsava
    2)在节点复制的时候回进行bgsava生成rdb文件并发送给从节点
    3)执行debug reload命令重载redis时也会触发sava操作
    4)默认情况下执行shutdown命令  如果没有开启AOF持久化则会自动执行bgsava
2.aof:
    aof持久化是以独立日志的方式记录每一次写命令,重启时再执行aof文件的命令达到恢复数据的作用。
    开启aof需要在配置文件中打开appendonly yes,默认文件名称appenonly.aof
    随着aof文件的变大,redis引入文件重写机制来压缩文件体积,也就是把redis进程内的数据转化为写命令同步到新的aof文件中
    新的aof文件之所以会变下,主要是因为旧的aof文件一些命令,比如del key1 、del key2 等无效的命令不会在保存
    然后还会将多条命令合并为一条命令 如:lpush list a、lpush list b等转化为lpush list a b
    AOF重写过程也分为手动和自动触发  手动bgrewriteaof命令 自动需要在配置文件配置

你可能感兴趣的:(redis开发与运维笔记)