Redis知识点.mm
2020-02-11 12:04:41   0  举报             
     
         
 AI智能生成
  Redis知识图谱
    作者其他创作
 大纲/内容
  1.特性及应用场景    
     特性    
     单线程  
     纯内存访问  
     支持数据持久化  
     非阻塞IO(epoll)  
     应用场景    
     缓存  
     队列  
     网站访问统计  
     分布式Session  
     应用排行榜  
     社交关系图  
     版本新特性    
     2.8    
     主从断线重连后采取部分复制(Psync)  
     Redis Sentinel Stable  
     3.0    
     Redis Cluster  
     3.2    
     GEO  
     4.0    
     提供模块系统方便第三方拓展  
     非阻塞del和flushall/flushdb功能  
     RDB和AOF混合持久化模式  
     Redis Cluster兼容NAT和Docker  
     5.0    
     新数据类型Stream(借鉴了Kafka的设计,消息可持久化)  
     新Redis模块API:Timers and Cluster API  
     RDB现在存储LFU和LRU信息  
     集群管理器从Ruby(redis-trib.rb)改成C重写  
     新sorted set命令:ZPOPMIN/MAX和阻塞变量  
     主动碎片整理  
     增强HyperLogLog实现  
     内存统计报告更直观  
     Jemalloc升级到5.1版  
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
     2.数据结构及内部编码    
     基本数据类型    
     字符串(String)    
     整型(int)  
     String    
     存储的值    
     可以是字符串、整数或浮点,统称为元素  
     读写能力    
     对字符串操作,对整数类型加减  
     String类型操作    
     set    
     设置置顶key的值    
     set key value  
     get    
     获取指定key的值    
     get key  
     incr    
     将key中储存的数字值增一    
     incr key  
     decr key    
     将key中储存的数字值减一    
     decr key  
     incrby    
     key 所储存的值增加给定的减量值(decrement)    
     incrby key decrement  
     decrby    
     key 所储存的值减去给定的减量值(decrement)    
     decrby key decrement  
     append    
     如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。    
     append key value  
     setnx    
     只有在 key 不存在时设置 key 的值    
     setnx key value  
     mget    
     获取所有(一个或多个)给定 key 的值。    
     mget key [key...]  
     mset    
     同时设置一个或多个 key-value 对    
     mget key value [key value ...]  
     getset    
     将给定 key 的值设为 value ,并返回 key 的旧值(old value)。    
     getset key value  
     setex    
     将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。    
     setex key seconds value  
     strlen    
     返回 key 所储存的字符串值的长度    
     strlen key  
     del    
     删除键    
     del key  
     命令(通用的命令)    
     GET    
     GET  
     SET    
     SET  
     DEL    
     DEL  
     embstr编码的简单动态字符串  
     简单动态字符串  
     列表(List)    
     List类型操作    
     push    
     lpush    
     将一个或多个值插入到列表头部    
     lpush key value1 [value2....]  
     rpush    
     将一个或多个值插入到列表尾部    
     rpush key value1 [value2....]  
     pop    
     lpop    
     移出并获取列表的第一个元素    
     lpop key  
     rpop    
     移出并获取列表的最后一个元素    
     rpop key  
     lrange    
     获取列表指定范围内的元素    
     lrange key start stop  
     llen    
     获取列表长度    
     llen key  
     lindex    
     通过索引获取列表中的元素    
     lindex key index  
     lrem    
     移除列表元素    
     lrem key count value    
     count > 0    
     从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT  
     count < 0    
     从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值  
     count = 0    
     移除表中所有与 VALUE 相等的值  
     lset key index value    
     通过索引设置列表元素的值    
     lset key index value  
     命令    
     LPUSH    
     LPUSH  
     LPUSH list-key 111  
     RPUSH    
     RPUSH  
     RPUSH list-key 222  
     LPOP    
     LPOP  
     LPOP list-key 111  
     RPOP    
     RPOP  
     RPOP list-key 222  
     LINDEX    
     LINDEX  
     LINDEX list-key 0  
     LRANGE    
     LRANGE  
     LRANGE list-key 0 -1  
     List    
     存储的值    
     一个有序序列集合且每个节点都包好了一个元素  
     读写能力    
     序列两端推入、或弹出元素、修剪、查改或移除元素  
     链表(Linkedlist)  
     快速列表(Quicklist)  
     哈希(Hash)    
     哈希表(Hashtable)  
     压缩表(Ziplist)  
     Hash    
     存储的值    
     有key-valued的散列组,其中key是字符串,value是元素  
     读写能力    
     按照key进行增加删除  
     命令    
     HSET    
     在 散 列 里面 关联 起 给定 的 键值 对  
     HSET  
     HGET    
     获取 指定 散 列 键 的 值  
     HGET  
     HGETALL    
     获取 散 列 包含 的 所有 键值 对  
     HGETALL  
     HDEL    
     如果 给定 键 存 在于 散 列 里面, 那么 移 除 这个 键  
     HDEL  
     Hash类型操作    
     hset    
     将哈希表 key 中的字段 field 的值设为 value    
     srem key field value  
     hmset    
     同时将多个 field-value (域-值)对设置到哈希表 key 中    
     hmset key field1 value1 [field2 value2]  
     hsetnx    
     只有在字段 field 不存在时,设置哈希表字段的值    
     hsetnx key field value  
     hget    
     获取存储在哈希表中指定字段的值    
     hget key field  
     hmget    
     获取所有给定字段的值    
     hget key field1 [field2]  
     hgetall    
     获取在哈希表中指定 key 的所有字段和值    
     hgetall key  
     hvals    
     获取哈希表中所有值    
     hvals key  
     hlen    
     获取哈希表中字段的数量    
     hlen key  
     hkeys    
     获取所有哈希表中的字段    
     hkeys key  
     hdel    
     删除一个或多个哈希表字段    
     hdel key field1 [field2]  
     hexitst    
     查看哈希表 key 中,指定的字段是否存在    
     hexitst key field  
     集合(Set)    
     整型集合(intset)  
     哈希表(Hashtable)  
     Set    
     存储的值    
     无序的方式,各不相同的元素  
     读写能力    
     从集合中插入或删除元素  
     Set类型操作    
     sadd    
     向集合添加一个或多个成员(存在则返回0)    
     sdd key member1 [member2]  
     scard    
     获取集合的成员数    
     scard key  
     sinter    
     返回给定所有集合的交集    
     sinter key1 [key2]  
     sismember    
     判断 member 元素是否是集合 key 的成员    
     sismember key member  
     smembers    
     返回集合中的所有成员    
     smembers key  
     srandmember    
     返回集合中一个或多个随机数    
     srandmember key [count]  
     srem    
     移除集合中一个或多个成员    
     srem key member1 [member2]  
     SET( 集合)    
     包含 字符串 的 无序 收集 器( unordered collection), 并且 被 包含 的 每个 字符串 都是 独一无二、 各不相同 的  
     命令    
     SADD    
     将给 定 元素 添加 到 集合  
     SMEMBERS    
     返回 集合 包含 的 所有 元素  
     SISMEMBER    
     检查 给定 元素 是否 存在 于 集合 中  
     有序集合(Zset)    
     压缩表(Ziplist)  
     Sort Set    
     存储能力    
     带分数的score-value有序集合,其中score为浮点,value为元素  
     读写能力    
     集合插入,按照分数范围查找  
     命令    
     ZADD    
     将 一个 带有 给定 分值 的 成员 添加 到有 序 集合 里面  
     ZADD  
     ZRANGE    
     根据 元素 在 有序 排列 中 所处 的 位置, 从 有序 集合 里面 获取 多个 元素  
     ZRANGEBYSCORE    
     获取 有序 集合 在给 定 分值 范围内 的 所有 元素  
     ZRANGE  0 -1 WITHSCORES  
     ZREM    
     如果 给定 成员 存在 于 有序 集合, 那么 移 除 这个 成员  
     ZREM  
     跳跃表(Skiplist)  
     其他数据类型    
     Bitmap  
     Hyperloglog  
     GEO  
     3.持久化    
     RDB    
     内存快照  
     恢复速度快,持久化性能高.但是存在数据丢失风险  
     AOF    
     日志文件追加记录  
     实时持久化,数据安全性更高.持久化效率低  
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
     4.复制    
     原理    
     同步RDB文件  
     复制缓冲区  
     类型    
     部分复制(Psync,2.8版本之后)  
     全量复制(Sync)  
     拓扑    
     星型    
     主 - 从(单节点)  
     主 -  从(多节点)  
     树型    
     主 - 从(主) - 从  
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
     5.高可用    
     Redis Sentinel  
     Redis Cluster(集群自带高可用)  
     Keepalived  
     6.分布式    
     方案    
     集群    
     Redis Cluster  
     中间件分片    
     TwemProxy  
     CodisProxy  
     客户端分片    
     业务程序  
     原理    
     客户端分片    
     一致性哈希算法  
     Codis    
     虚拟槽分区(1024个槽)  
     集群内部数据节点独立运作,无需相互通信  
     Redis Cluster    
     Gossip协议 -- 集群数据节点内部相互通信  
     Raft算法 -- 集群内选主  
     虚拟槽分区(16384个槽)  
     7.阻塞    
     持久化阻塞    
     Fork子进程    
     RDB持久化  
     AOF文件重写  
     命令阻塞    
     keys *  
     smembers  
     lrange  
     hgetall  
     8.内存    
     内存消耗    
     对象内存    
     存储着所有数据  
     缓冲内存    
     客户端缓冲    
     通过参数client-output-buffer-limit控制  
     复制积压缓冲区    
     根据repl-backlog-size参数控制  
     AOF缓冲区    
     用于在Redis重写AOF文件期间保存最近的写入命令  
     内存碎片    
     可采用数据对齐和安全重启等方式规避内存碎片的问题  
     内存回收策略    
     惰性删除  
     定时任务删除  
     内存优化    
     缩减键值对象的长度  
     共享对象池  
     字符串优化  
     编码优化(使用ziplist编码能节约内存但会提高耗时-空间换时间)  
     控制键的数量(如使用hash结构重构字符串结构)  
     9.客户端    
     Jedis(Java)  
     Redis-py(Python)  
     Redigo(GO)  
     10.辅助功能    
     慢查询(slowquery)  
     管道(pipeline)  
     11.缓存问题隐患    
     缓存无底洞  
     缓存穿透  
     缓存雪崩  
     热点key倾斜  
     热点key重建  
     12.性能调优    
     vm.overcommit_memory=1  
     vm.swapiness=1  
     关闭THP特性    
     echo never > /sys/kernel/mm/transparent_hugepage/enabled  
     调大ulimit  
     调大TCP Backlog  
     Redis参数调优    
     appendfsync  
     no-appendfsync-on-rewrite  
     auto-aof-rewrite-percentage  
     auto-aof-rewrite-min-size  
     hash-max-ziplist-entries  
     hash-max-ziplist-value  
     list-max-ziplist-size  
     set-max-intset-entries  
     zset-max-ziplist-entries  
     zset-max-ziplist-value  
     hll-sparse-max-bytes  
     client-output-buffer-limit  
     13.监控    
     info  
     redis-stat  
     redislive  
     redis-cli monitor  
     redis-cli --latency  
     Codis Dashboard  
     Zabbix  
     Grafana  
     14.Redis与MC    
     MC、Redis的区别    
     Redis    
     1.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。2.Redis支持数据的备份,即master-slave模式的数据备份。3.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。4.一般用来做消息队列,存储耗时任务。  
     MC    
     1.MC存储热点数据,经常访问的数据2.不可持久化数据,数据都是存在内存,重启后数据丢失3.只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。  
     MC、Redis的瓶颈    
     服务器内存大小    
     加大服务器内存,使用高配服务器  
     做MC、Redis集群    
     1.MC实现集群:http://blog.csdn.net/zljjava/article/details/505108062.Redis分布式锁:http://blog.csdn.net/ugg/article/details/41894947  
     文件热更新  
     MC、Redis的可视化工具    
     Memcached管理与监控工具----MemAdmin    
     https://my.oschina.net/u/656519/blog/125234  
     Redis管理与监控工具-----Redis Desktop Manager    
     http://blog.csdn.net/joyhen/article/details/47358999  
     MC、Redis的使用场景    
     实时热数据存储    
     热数据储存【MC】    
     微信token获取次数有限,存储在MC中方便读取  
     频繁读取某个信息,存储在MC中方便读取  
     充值中心订单数据存储  
     一卡通微信信息存储  
     防刷单机制【MC】    
     充值中心使用MC来存储用户访问接口次数,来防刷单  
     存储session【MC】    
     充值中心使用MC来存储session  
     延时异步任务    
     守护进程【Redis】    
     充值中心游戏注入异步处理  
     充值中心日志入库异步处理  
     充值中心的补单机制异步处理  
     信息推送【MQ或Redis】    
     AUC系统的邮箱发送  
     短信系统发短信  
     站内信发送、豆豆发送  
     阻塞式队列【MQ】  
     一元夺宝【Redis】    
     通知开奖  
     购买时,回调异步  
     秒杀抢购  
     MC、Redis的需要注意的点    
     原子锁--保证操作的唯一性    
     MC    
     add函数  
     Redis    
     setnx函数  
     sadd函数=>相当于MC的add函数  
     内存爆满    
     MC    
     不被访问的被新的替换掉    
     key的储存时间要设定好  
     redis    
     启动swap机制,将内容存储在硬盘中,性能下降    
     key的储存时间要设定好    
     注意事项:http://www.oschina.net/question/253614_108222  
     单个key内容大小    
     MC    
     单个缓存项不能超过1M  
     Redis    
     在Redis中字符串类型的Value最多可以容纳的数据长度是512M  
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
     15.Redis应用    
     redis构建web网站    
     登录和cookie缓存  
     使用redis实现购物车  
     页面缓存  
     数据行缓存  
     网页分析  
     小结  
     使用redis构建支持程序    
     使用redis来记录日志    
     最新日志  
     常见日志  
     计数器和统计数据    
     将计数器存储到redis  
     使用redis存储统计数据  
     简化统计数据的记录与发现  
     查找IP所属城市以及国家    
     载入位置表格  
     查找IP所属城市  
     服务的发现与配置    
     使用redis存储配置信息  
     为每个应用程序组件分别配置一个redis  
     自动redis连接管理  
     redis搜索应用程序    
     使用redis进行搜索    
     基本搜索原理  
     对搜索结果进行排序  
     有序索引    
     使用有序结合对搜索结果进行排序  
     使用有序结合实现非数值排序  
     广告定向    
     广告服务器  
     对广告进行索引  
     执行广告定向操作  
     从用户行为中学习  
     职位搜索    
     逐个查找合适的职位  
     以搜索方式查找合适的职位  
     小结  
     redis构建社交网站    
     用户和状态    
     用户信息  
     状态消息  
     主页时间线  
     关注者列表和正在关注列表  
     状态消息的发布与删除  
     流API    
     流API提供的数据  
     提供数据  
     对流消息进行过滤  
     小结  
     redis构建应用程序组件    
     自动补全    
     自动补全最近联系人  
     通讯录自动补全  
     分布式锁    
     锁的重要性  
     简易锁  
     使用redis构建锁  
     细粒度锁  
     带有超时限制特性的锁  
     计数信号量    
     构建基本的计数信号量  
     公平信号量  
     刷新信号量  
     消除竞争条件  
     任务队列    
     先进先出队列  
     延迟任务  
     消息拉取    
     单接受者消息的发送与订阅替代品  
     多接受者消息的发送与订阅替代品  
     文件分发    
     地理位置聚合用户数据  
     发送日志文件  
     接收日志文件  
     处理日志文件  
     小结  
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
     16.redis的lua脚本    
     不写c代码的情况下添加新功能    
     将lua脚本载入redis  
     创建新状态消息  
     使用lua重写锁和信号量    
     使用lua实现锁的原因  
     重写锁实现  
     使用lua实现计数信号量  
     移除WATCH/MULTI/EXEC事务    
     回顾群组自动补全程序  
     再次对商品买卖市场进行改造  
     使用Lua对列表进行分片    
     分片列表的构成  
     将元素推入分片列表  
     从分片里面弹出元素  
     对分片列表执行阻塞弹出操作  
     小结    
     欢迎关注微信公众号:服务:omsoofw 和订阅:jobdata  
    
 
 
 
 
  0 条评论
 下一页