zoukankan      html  css  js  c++  java
  • <Redis入门指南>

    Redis:Remote Dictionary Server(远程字典服务器)
    第1章 简介
    1.Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。
    2.键值类型:字符串、散列、列表、集合、有序集合
    3.特性:存储结构、内存存储与持久化、功能丰富、简单稳定

    第2章 准备
    1.可执行文件说明
    redis-server Redis服务器
    redis-cli Redis命令行客户端
    2.启动和停止
    启动:redis-server --port 6379
    停止:redis-cli SHUTDOWN / kill
    3.客户端命令
    redis-cli -h 127.0.0.1 -p 6379
    4.命令返回值
    状态回复:如PING
    错误回复:如不存在的命令
    整数回复:如INCR
    字符串回复:如GET
    多行字符串回复:如KEYS *
    5.配置
    redis-server /etc/redis.conf
    或动态修改配置:
    CONFIG SET loglevel warning / CONFIG GET loglevel

    第3章 入门
    1.命令
    KEYS pattern:获得符合规则的键名列表。但是需要遍历所有键,性能较差,不建议生产中使用。
    pattern支持glob风格通配符格式。
    ? 匹配一个字符
    * 匹配任意个字符
    [] 匹配括号间的任一字符,可以使用“-”符号表示一个范围
    x 转义符号
    EXISTS key:判断一个键是否存在。存在返回整型1,否则返回0
    DEL key [key ...]:删除键,可以删除一个或多个键,返回值是删除的键的个数
    DEL命令不支持通配符,但是可以:redis-cli DEL `redis-cli KEYS "user:*"`
    TYPE key:获得键值的数据类型
    2.字符串类型
    赋值与取值:
    SET key hello
    GET key //不存在时返回空结果
    INCR key //递增数字。如果key不是整型,将会报错
    INCRBY key increment //增加指定的increment
    DECR key //递减
    DECRBY key decrement //减少指定的整数
    INCRBYFLOAT key increment //增加指定浮点数
    APPEND key value //向键值的末尾增加value。返回值是追加后字符串的总长度
    STRLEN key //返回键值长度
    MGET key [key ...] //同时获得多个键值
    MSET key value [key value ...] //同时设置多个键值
    位操作:
    GETBIT key offset
    SETBIT key offset value
    BITCOUNT key [start] [end] //获得key中值是1的二进制位个数
    BITPOS key bit [start] [end] //获得指定键的第一个位值是0或1的位置
    BITOP operation destkey key [key ...]
    3.散列类型
    赋值与取值:
    HSET key field value
    HGET key field
    HMSET key field value [field value ...]
    HMGET key field [field ...]
    HGETALL key
    HEXISTS key field //判断字段是否存在
    HSETNX key field value //当字段不存在时赋值。如果存在,则不赋值
    HINCRBY key field increment //增加数字
    HDEL key field [field ...] //删除字段
    HKEYS key //获取字段名
    HVALS key //获取字段值
    HLEN key //获取字段数量
    4.列表类型
    向列表两端增加元素:
    LPUSH key value [value ...]
    RPUSH key value [value ...]
    从列表两端弹出元素:
    LPOP key
    RPOP key
    LLEN key //获取列表中元素的个数,复杂度O(1)
    LRANGE key start stop //获取列表片段,包含两端元素
    LREM key count value //删除列表中指定的值
    当count > 0时,从列表左边开始删除前count个值为value的元素
    当count < 0时,从列表右边开始删除前|count|个值为value的元素
    当count = 0时,删除所有值为value的元素
    获得/设置指定索引的元素值:
    LINDEX key index
    LSET key index value
    LTRIM key start end //只保留列表指定片段
    LINSERT key BEFORE|AFTER pivot value //向列表中插入元素。在列表中从左到右查找值为pivot的元素,根据第二个参数BEFORE还是AFTER决定将value插入到该元素的前面还是后面。
    RPOPLPUSH source destination //将元素从一个列表转到另一个列表
    5.集合类型
    增加/删除元素:
    SADD key member [member ...] //返回值为成功加入的元素数量
    SREM key member [member ...] //返回值为成功删除的元素数量
    SMEMBERS key //获得集合中的所有元素
    SISMEMBER key member //判断元素是否在集合中
    集合间运算:
    SDIFF key [key ...] //对多个集合执行差集运算
    SINTER key [key ...] //对多个集合执行交集运算
    SUNION key [key ...' //对多个集合执行并集运算
    SCARD key //获得集合中元素个数
    集合运算并将结果存储:
    SDIFFSTORE destination key [key ...] //将结果存储在destination中
    SINTERSTORE destination key [key ...]
    SUNIONSTORE destination key [key ...]
    SRANDMEMBER key [count] //随机获得集合中的元素
    当count为正数时,会随机从集合获得count个不重复的元素
    当count为负数时,会随机从集合获得|count|个元素,这些元素可能相同
    SPOP key //从集合中弹出一个元素
    6.有序集合类型:使用散列表和跳跃表实现,时间复杂度是O(log(N))
    ZADD key score member [score member ...] //增加元素
    ZSCORE key member //获得元素的分数
    获得排名在某个范围内的元素列表
    ZRANGE key start stop [WITHSCORES] //按照元素分数从小到大返回索引,包含两段元素。加上WITHSCORES时返回元素,分数
    ZREVRANGE key start stop [WITHSCORES] //按照元素分数从大到小返回索引
    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] //获得指定分数范围的元素。包含两端元素。可以在分数前加上"("来不包含端点值
    ZINCRBY key increment member //增加某个元素的分数
    ZCARD key //获得集合中元素的数量
    ZCOUNT key min max //获得指定分数范围内的元素个数
    ZREM key member [member ...] //删除一个或多个元素
    ZREMRANGEBYRANK key start stop //按照排名范围删除元素
    ZREMRANGEBYSCORE key min max //按照分数范围删除元素
    获得元素排名:
    ZRANK key member //从小到大
    ZREVRANK key member //从大到小
    计算有序集合的交集:
    ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] //计算多个有序集合的交集并将结果存储在destination键中,返回值为destination键中的元素个数

    第4章 进阶
    1.事务:同命令一样是Redis的最小执行单位。一个事务中的命令要么都执行,要么都不执行。
    > MULTI
    > SADD "user:1:following" 2
    > SADD "user:2:following" 1
    > EXEC
    WATCH key [key ...] //监控一个或多个键,一旦其中有一个键被修改,之后的事务就不会执行。监控一直持续到EXEC命令
    UNWATCH //取消监控
    2.过期时间
    EXPIRE key seconds //seconds标识过期时间,单位秒
    TTL key //查看键剩余时间。-1:永久 -2:键不存在
    PERSIST key //清除过期时间
    EXPIREAT key time //使用Unix时间表示过期时刻,秒
    PEXPIREAT key time //毫秒
    3.排序
    sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] //重点参数:BY/GET/STORE
    尽可能减少待排序键中元素的数量;
    使用LIMIT参数只获取需要的数据;
    如果要排序的数据了较大,尽可能使用STORE参数将结果缓存。
    4.消息通知
    BRPOP key timeout //timeout为超时时间,单位是秒。当超过时间仍没有新元素时会返回nil
    BLPOP key timeout
    BRPOP key1 key2 [key3 ...] timeout //可以实现优先级队列
    发布/订阅:
    SUBSCRIBE channel [channel ...]
    UNSUBSCRIBE [channel [channel ...]]
    PUBLISH channel message
    按照规则订阅:
    PSUBSCRIBE pattern [pattern ...]
    PUNSUBSCRIBE [pattern [pattern ...]]
    5.管道
    6.节省空间
    精简键名和键值
    内部编码优化
    可以使用 OBJECT ENCODING key 来查看内部编码方式

    第5章 实践
    1.PHP与Redis
    2.Ruby与Redis
    3.Python与Redis
    4.Node.js与Redis

    第6章 脚本
    1.概览
    2.Lua语言
    3.Redis与Lua
    4.深入脚本

    第7章 持久化
    1.RDB方式:根据指定规则“定时”将内存中的数据存储到硬盘上
    根据配置规则进行自动拍照:由用户在配置文件自定义,由时间窗口M和改动的键的个数N两个参数构成。
    save 300 10 //300秒内至少有10个键被修改则进行快照
    用户执行SAVE或BASAVE命令:
    SAVE:在快照执行过程中会阻塞所有来自客户端的请求,尽量避免生产环境使用
    BGSAVE:异步进行快照操作。可以使用LASTSAVE获取最近一次成功执行快照的时间
    执行FLUSHALL命令:该命令会清楚数据库中所有数据。只要自动快照条件不为空,就会执行一次快照操作。
    执行复制时:当设置了主从模式时,会在复制初始化时进行自动快照。
    2.AOF方式:每次执行命令后将命令本身记录下来
    开启AOF:appendonly yes
    auto-aof-rewrite-percentage 100 //当前AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写
    auto-aof-rewrite-min-size 64mb //限制允许重写的最小AOF文件大小
    同步硬盘数据:
    appendsync always/everysec/no //默认采用everysec规则,即每秒执行一次同步操作。always表示每次执行写入都回执行同步。no表示不主动进行同步操作,完全交由操作系统来做(即每30秒一次)

    第8章 集群
    1.复制
    读写分离与一致性:
    从数据库持久化:
    无硬盘复制:
    增量复制:
    2.哨兵
    哨兵:监控Redis系统的运行情况。
    监控主数据库和从数据库是否正常运行
    主数据库出现故障时自动将从数据库转换为主数据库
    3.集群

    第9章 管理
    1.安全
    2.通信协议
    3.管理工具
    redis-cli:
    SLOWLOG GET //获得当前的耗时命令日志
    MONITOR //命令监控
    phpRedisAdmin:网页端管理工具,支持以树形结构查看键列表,编辑键值,导入/导出数据库数据,查看数据库信息和查看键信息等功能。
    Rdbtools:快照文件解析器

  • 相关阅读:
    目标检测:YOLOV2
    目标检测:YOLOV1
    格拉姆矩阵(Gram matrix)详细解读
    Java 线程Thread.Sleep详解
    luogu2429 制杖题
    luogu2441 角色属性树
    luogu2398 SUM GCD
    luogu2303 [SDOI2012] Longge的问题
    luogu2054 洗牌 同余方程
    线性同余方程
  • 原文地址:https://www.cnblogs.com/onwalking/p/10275577.html
Copyright © 2011-2022 走看看