Redis
2020-11-03 10:05:43 0 举报
AI智能生成
redis-官网总结
作者其他创作
大纲/内容
Redis Cluster
Redis 集群教程
Redis 集群的数据分片
Redis 集群的主从复制模型
Redis 一致性保证
搭建并使用Redis集群
使用集群
使用redis-rb-cluster写一个例子
集群重新分片
一个更有趣的程序
测试故障转移
手动故障转移
Redis 集群规范
实现的功能子集
Redis 集群协议中的客户端和服务器端
安全写入
可用性
表现
为什么要避免使用合并操作
键分布模型
键哈希标签(Keys hash tags)
集群节点属性
集群拓扑结构
节点握手
MOVED 重定向
集群在线重配置(live reconfiguration)
ASK 重定向
失效检测(Failure detection)
集群阶段(Cluster epoch)
配置阶段(Configuration epoch)
丛节点的选举和提升
主节点回复从节点的投票请求
从节点选举的竞争情况
服务器哈希槽信息的传播规则
UPDATE 消息
备份迁移
备份迁移算法
发布/订阅(Publish/Subscribe)
使用
过期
将Redis当做使用LRU算法的缓存来使用
Maxmemory配置指令
回收策略
回收进程如何工作
近似LRU算法
Redis事务
用法
事务中的错误
为什么 Redis 不支持回滚(roll back)
放弃事务
使用 check-and-set 操作实现乐观锁
了解 WATCH
使用 WATCH 实现 ZPOP
Redis 脚本和事务
分区(Partitioning)
为什么分区非常有用
分区基本概念
不同的分区实现方案
分区的缺点
持久化数据还是缓存?
预分片
Redis分区实现
分布式锁(Distributed locks)
实现细节
安全和活性失效保障
为什么基于故障转移的实现还不够
单Redis实例实现分布式锁的正确方法
Redlock算法
这个算法是异步的么?
失败时重试
释放锁
安全争议
活性争议
性能,崩溃恢复和Redis同步
使算法更加可靠:锁的扩展
key事件通知(Redis keyspace notifications)
事件类型
配置
不同的命令生成的事件
过期事件的时间安排
管道
请求/响应协议和RTT
Redis 管道(Pipelining)
管道(Pipelining) VS 脚本(Scripting)
Redis发布订阅
推送消息的格式
数据库与作用域
协议示例
模式匹配订阅
同时匹配模式和频道订阅的消息
模式匹配统计的意义
程序示例:
客户端库实现提示
Redis Lua脚本
Lua脚本调试
Redis命令
Cluster
CLUSTER ADDSLOTS slot [slot ...]
CLUSTER COUNT-FAILURE-REPORTS node-id
CLUSTER COUNTKEYSINSLOT slot
CLUSTER DELSLOTS slot [slot ...]
CLUSTER FAILOVER [FORCE|TAKEOVER]
......
Connection
AUTH password
ECHO message
PING
QUIT
SELECT index
SWAPDB index index
Geo(地理位置命令)
Hashes
HDEL key field [field ...]
HEXISTS key field
HGET key field
HGETALL key
HINCRBY key field increment
HINCRBYFLOAT key field increment
HKEYS key
HLEN key
HMGET key field [field ...]
HMSET key field value [field value ...]
HSCAN key cursor [MATCH pattern] [COUNT count]
HSET key field value
HSETNX key field value
HSTRLEN key field
HVALS key
HyperLogLog
PFADD key element [element ...]
PFCOUNT key [key ...]
PFMERGE destkey sourcekey [sourcekey ...]
Keys
DEL key [key ...]
DUMP key
EXISTS key [key ...]
EXPIRE key seconds
EXPIREAT key timestamp
KEYS pattern
MIGRATE host port key destination-db timeout [COPY] [REPLACE]
MOVE key db
OBJECT subcommand [arguments [arguments ...]]
PERSIST key
PEXPIRE key milliseconds
PEXPIREAT key milliseconds-timestamp
PTTL key
RANDOMKEY
RENAME key newkey
RENAMENX key newkey
RESTORE key ttl serialized-value [REPLACE]
SCAN cursor [MATCH pattern] [COUNT count]
SORT key [BY pattern] [LIMIT offset count] [GET pattern] [ASC|DESC] [ALPHA] destination
TOUCH key [key ...]
TTL key
TYPE key
UNLINK key [key ...]
WAIT numslaves timeout
Lists
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
BRPOPLPUSH source destination timeout
LINDEX key index
LINSERT key BEFORE|AFTER pivot value
LLEN key
LPOP key
LPUSH key value [value ...]
LPUSHX key value
LRANGE key start stop
LREM key count value
LSET key index value
LTRIM key start stop
RPOP key
RPOPLPUSH source destination
RPUSH key value [value ...]
RPUSHX key value
Pub/Sub
PSUBSCRIBE pattern [pattern ...]
PUBLISH channel message
PUBSUB subcommand [argument [argument ...]]
PUNSUBSCRIBE [pattern [pattern ...]]
SUBSCRIBE channel [channel ...]
UNSUBSCRIBE [channel [channel ...]]
Scripting
EVAL script numkeys key [key ...] arg [arg ...]
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
SCRIPT DEBUG YES|SYNC|NO
SCRIPT EXISTS script [script ...]
SCRIPT FLUSH
SCRIPT KILL
SCRIPT LOAD script
Server
CLIENT KILL [ip:port] [ID client-id] [normal|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
CLIENT LIST
CLIENT PAUSE timeout
CLIENT REPLY ON|OFF|SKIP
......
Sets
SADD key member [member ...]
SCARD key
SDIFF key [key ...]
SDIFFSTORE destination key [key ...]
SINTER key [key ...]
SINTERSTORE destination key [key ...]
SISMEMBER key member
SMEMBERS key
SMOVE source destination member
SPOP key [count]
SRANDMEMBER key [count]
SREM key member [member ...]
SSCAN key cursor [MATCH pattern] [COUNT count]
SUNION key [key ...]
SUNIONSTORE destination key [key ...]
Sorted Sets
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
ZCARD key
ZCOUNT key min max
ZINCRBY key increment member
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
.......
Strings
APPEND key value
BITCOUNT key [start end]
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
BITOP operation destkey key [key ...]
BITPOS key bit [start] [end]
DECR key
DECRBY key decrement
GET key
GETBIT key offset
GETRANGE key start end
GETSET key value
INCR key
INCRBY key increment
INCRBYFLOAT key increment
MGET key [key ...]
MSET key value [key value ...]
MSETNX key value [key value ...]
PSETEX key milliseconds value
SET key value [EX seconds] [PX milliseconds] [NX|XX]
SETBIT key offset value
SETEX key seconds value
SETNX key value
SETRANGE key offset value
STRLEN key
Transactions
DISCARD
EXEC
MULTI
UNWATCH
WATCH key [key ...]
Redis modules API
Introduction to Redis modules.
Redis 模块:API的介绍
载入模块
最简单的模块示例
模块初始化
Redis 模块的设置和依赖关系
给 Redis 模块传递配置参数
和 RedisModuleString 对象配合使用
调用 Redis 命令
释放回复对象的调用
数量和类型检查
自动化内存管理
分配内存到模块中
Implementing native data types
Redis 模块系统中的原生类型
原生类型的概述
注册一个新的数据类型
加载和生成RDB的方法
AOF重写
处理多种编码
分配内存
Blocking operations
如何阻塞和恢复运行
解除阻塞时传递回复数据
从一个客户端阻塞中退出
回复和超时回调可以使用一个函数
单线程内使用数据副本
Redis modules API reference
性能优化
内存优化
小的聚合类型数据的特殊编码处理
使用32位的redis
位级别和字级别的操作
尽可能使用散列表(hashes)
使用散列结构高效存储抽象的键值对
内存分配
大量插入数据
使用Luke协议
生成Redis协议
pipe mode的工作原理是什么?
从文件中批量插入数据
创建文件
转码
执行导入
总结:
管理
Redis-Cli
配置(Configuration)
通过命令行传参
运行时配置更改
配置Redis成为一个缓存
复制(Replication)
Redis 复制功能是如何工作的
无需磁盘参与的复制
只读性质的 slave
允许只写入 N 个附加的副本
Redis 复制如何处理 key 的过期
在 Docker 和 NAT 中配置复制
INFO 和 ROLE 命令
重新启动和故障转移后的部分重同步
持久化(Persistence)
RDB
AOF
如何选择使用哪种持久化方式?
快照
工作方式
只追加操作的文件(Append-only file,AOF)
AOF有多耐用?
如果AOF文件损坏了怎么办?
工作原理
日志重写
怎样从RDB方式切换为AOF方式
AOF和RDB之间的相互作用
备份redis数据
容灾备份
Redis 管理(Redis Administration)
安全性(Security)
Redis常规安全模式
网络安全
认证的特性
禁用的特殊命令
外部客户端通过仔细构造的输入触发的攻击
字符串转义和NoSQL注入
代码安全
加密(encryption)
信号处理(Signals Handling)
SIGTERM信号的处理
SIGSEGV,SIGBUS,SIGFPF和SIGILL信号的处理
子进程被终止时会发生什么
不触发错误状态的情况下终止RDB文件的保存
连接处理(Connections Handling)
客户端的连接的建立
客户端按照什么顺序被处理
最大数量的客户端
输出缓冲限制
搜索缓冲硬限制
客户端超时
客户端命令
延迟监控(Latency monitoring)
事件和时间序列
如何启用延迟监控
延迟命令(LATENCY)的信息报告
Redis Releases
高可用性(High Availability)
获取 Sentinel
启动 Sentinel
配置 Sentinel
主观下线和客观下线
每个 Sentinel 都需要定期执行的任务
自动发现 Sentinel 和从服务器
Sentinel API
Sentinel 命令
发布与订阅信息
故障转移
Sentinel 自动故障迁移的一致性特质
Sentinel 状态的持久化
Sentinel 在非故障迁移的情况下对实例进行重新配置
TILT 模式
处理 -BUSY 状态
Q&A
Redis与其他key-value存储有什么不同?
Redis的内存占用情况怎么样?
我喜欢Reids的高水平操作和功能,但我不喜欢所有数据都放在内存中,因为我没有一个大数据集的内存,有没有改变这方面的机会呢。
如果我的数据集需要使用非常大的内存,我不希望使用一致性哈希或其他方式将数据集分布在不同的节点,我还能采用Redis吗?
都有哪些办法可以降低Redis的内存使用情况呢?
Redis的内存用完了会发生什么?
在liunx下即使有很多的RAM通过fork()调用后台保存还是会失败!
Redis 的 on-disk-snapshots 是原子的吗?
Redis是单线程的,我怎么提高多核CPU的利用率?
一个Redis实例最多能存放多少的keys,List、Set、Sorted Set他们最多能存放多少元素?
Redis 是什么意思?
0 条评论
下一页