一站式学习Redis 从入门到高可用分布式实践

课程介绍:https://coding.imooc.com/class/151.html

百度云链接:http://yun.java1234.com/article/2956

基础压缩包版:https://pan.baidu.com/s/1_dRwOCJeW3L7oEJMgh86tw 提取码: ws26

增补在线即看版:https://pan.baidu.com/s/1KlaEUHCHF41BNhEXnHcBdg 提取码:e6vx

目录

第1章 Redis初识
带领听众进入Redis的世界,了解它的前世今生、众多特性、应用场景、安装配置、简单使用,可以让听众对Redis有一个全面的认识。
1-1 导学
1-2 Redis初识 试看
1-3 谁在使用Redis
1-4 redis特性目录
1-5 特性1-速度快
1-6 特性2-持久化
1-7 特性3-数据结构
1-8 特性4-多语言客户端
1-9 特性5-功能丰富
1-10 特性6-简单
1-11 特性7-复制
1-12 特性8-高可用分布式
1-13 redis典型使用场景
1-14 redis三种启动方式介绍
1-15 redis常用配置
1-16 redis安装启动演示

第2章 API的理解和使用
全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,听众可以在合适的应用场景选择合适的数据结构。 ...
2-1 -课程目录
2-2 -通用命令
2-3 数据结构和内部编码
2-4 单线程
2-5 字符串
2-6 hash (1)
2-7 hash (2)
2-8 list(1)
2-9 list(2)
2-10 set
2-11 zset

第3章 Redis客户端的使用
本章重点关注Redis客户端的开发,介绍了详细讲解了Java客户端Jedis,简单介绍下Python和Go语言的Redis客户端的选择和使用。
3-1 课程目录
3-2 Java客户端:Jedis
3-3 Python客户端:redis-py
3-4 Go客户端:redigo简介
3-5 Jedis配置优化(上)
3-6 Jedis配置优化(下)

第4章 瑞士军刀Redis其他功能
除了5种数据结构外,Redis还提供了诸如慢查询、Pipeline、Bitmap、HyperLogLog、发布订阅、GEO等附加功能,在这些功能的帮助下,Redis的应用场景更加丰富。
4-1 课程目录
4-2 慢查询
4-3 pipeline
4-4 发布订阅
4-5 bitmap
4-6 hyperloglog
4-7 geo

第5章 Redis持久化的取舍和选择
Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章将介绍介绍RDB和AOF两种持久化配置和运行流程,以及选择策略
5-1 目录
5-2 持久化的作用
5-3 RDB(1)
5-4 RDB(2)
5-5 RDB(3)
5-6 AOF(1)
5-7 AOF(2)
5-8 AOF实验
5-9 RDB和AOF抉择

第6章 常见的持久化开发运维问题
本章探讨了常见的持久化问题进行定位和优化,最后结合Redis常见的单机多实例部署场景进行优化
6-1 常见问题目录
6-2 fork
6-3 子进程开销和优化
6-4 AOF阻塞

第7章 Redis复制的原理与优化
复制是实现高可用的基石,但复制同样是运维的痛点,本部分详细分析复制的原理,讲解运维过程中可能遇到的问题。
7-1 目录
7-2 什么是主从复制
7-3 主从复制配置-介绍
7-4 主从复制配置-操作
7-5 runid和复制偏移量
7-6 全量复制
7-7 全量复制开销 + 部分复制
7-8 故障处理
7-9 主从复制常见问题

第8章 Redis Sentinel
本章将一步步解析Redis Sentinel的相关概念、安装部署、配置、客户端路由、原理解析,最后分析了Redis Sentinel运维中的一些问题。
8-1 sentinel-目录
8-2 主从复制高可用?
8-3 redis sentinel架构
8-4 redis sentinel安装与配置
8-5 redis sentinel安装演示-1
8-6 redis sentinel安装演示-2
8-7 java客户端
8-8 python客户端
8-9 实现原理-1-故障转移演练
8-10 实现原理-2.故障转移演练(客户端)
8-11 实现原理-3.故障演练(日志分析)
8-12 三个定时任务
8-13 主观下线和客观下线
8-14 领导者选举
8-15 故障转移
8-16 常见开发运维问题-目录
8-17 节点运维
8-18 高可用读写分离
8-19 本章总结

第9章 初识Redis Cluster
Redis Cluster是Redis 3提供的分布式解决方案,有效解决了Redis分布式方面的需求,同时它也是学习分布式存储的绝佳案例。本章将针对Redis Cluster的数据分布,搭建集群进行分析说明。
9-1 本章目录
9-2 呼唤集群
9-3 数据分布概论
9-4 节点取余分区
9-5 一致性哈希分区
9-6 虚拟槽哈希分布
9-7 基本架构
9-8 原生安装
9-9 原生安装-1.准备节点
9-10 原生安装-2.节点握手
9-11 原生安装-3.分配槽
9-12 原生安装-4.分配主从
9-13 ruby环境准备-说明
9-14 ruby环境准备-操作
9-15 redis-trib构建集群
9-16 原生命令和redis-trib.rb对比

第10章 深入Redis Cluster
本章将针对Redis Cluster的集群伸缩,请求路由,故障转移等方面进行分析说明。
10-1 集群伸缩目录
10-2 集群伸缩原理
10-3 扩展集群-1.加入节点
10-4 扩展集群-2.加入集群
10-5 扩展集群-3.迁移槽和数据
10-6 集群扩容演示-1
10-7 集群扩容演示-2
10-8 集群缩容-说明
10-9 集群缩容-操作
10-10 客户端路由-目录
10-11 moved异常说明和操作
10-12 ask重定向
10-13 smart客户端实现原理
10-14 JedisCluster执行源码分析
10-15 smart客户端JedisCluster-目录
10-16 JedisCluster基本使用
10-17 整合spring-1
10-18 整合spring-2
10-19 多节点操作命令
10-20 批量操作优化
10-21 故障转移-目录
10-22 故障发现
10-23 故障恢复
10-24 故障模拟
10-25 Redis Cluster常见开发运维问题-目录
10-26 集群完整性
10-27 带宽消耗
10-28 PubSub广播
10-29 集群倾斜-目录
10-30 数据倾斜
10-31 请求倾斜
10-32 读写分离
10-33 数据迁移
10-34 集群vs单机
10-35 本章总结

第11章 缓存设计与优化
讲解将缓存加入应用架构后带来的一些问题,这些问题常常会成为应用的致命点。
11-1 目录
11-2 缓存的受益和成本
11-3 缓存的更新策略
11-4 缓存粒度问题
11-5 缓存穿透问题
11-6 缓存雪崩优化 试看
11-7 无底洞问题
11-8 热点key的重建优化
11-9 本章总结

第12章 Redis云平台CacheCloud
本章结合前面的知识介绍redis规模化后使用云平台如何进行机器部署、应用接入、用户相关功能维护等问题
12-1 _目录
12-2 _Redis规模化困扰
12-3 _快速构建
12-4 机器部署
12-5 应用接入
12-6 用户功能
12-7 运维功能

第13章 课程总结
课程总结
13-1 _课程总结

第14章 增补:Redis布隆过滤器
现有50亿电话号码,如何快速判断10w个电话号码是否在其中?利用之前学习的bitmap和redis cluster构建分布式布隆过滤器
14-1 _目录_
14-2 引出布隆过滤器
14-3 布隆过滤器基本原理
14-4 布隆过滤器误差率
14-5 本地布隆过滤器
14-6 Redis布隆过器
14-7 Redis分布式布隆过滤器

第15章 Redis开发规范
本章介绍键值的设计、命令的优化、连接池优化、客户端使用规范及客户端常见问题,带领用户全面梳理Redis开发规范。
15-1 key设计
15-2 value设计
15-3 发现bigkey的方法
15-4 bigkey的删除
15-5 选择合理的数据结构
15-6 键值生命周期的管理
15-7 命令优化技巧
15-8 java客户端优化
15-9 连接池参数优化1
15-10 连接池参数优化2
15-11 连接池参数优化3

第16章 内存管理
本章主要讲解Redis内存消耗、组成分析、Redis内存管理设置及内存优化技巧。
16-1 Redis内存优化介绍
16-2 Redis内存消耗
16-3 客户端缓冲区
16-4 缓冲内存
16-5 对象内存
16-6 内存设置上限
16-7 内存回收策略
16-8 内存优化 试看
16-9 客户端缓冲区优化

第17章 开发运维常见坑
本章介绍Linux针对Redis的内核参数优化、Redis安全七个方法以及Redis热点key的发现方法。
17-1 redis开发运维那些坑
17-2 overcommit_memory参数讲解和演示
17-3 其它参数的讲解
17-4 安全的redis
17-5 安全七法则
17-6 热点key

 

 

第一章 Redis初识

一站式学习Redis 从入门到高可用分布式实践_第1张图片

一站式学习Redis 从入门到高可用分布式实践_第2张图片

Redis是什么

开源

基于键值对的存储服务系统

多种数据结构

高性能、功能丰富

Redis的特性

速度块   --10w OPS  存在内存,使用c语言,单线程

持久化   --将数据的更新异步地保存在磁盘上,断电不丢失数据

支持多种编辑语言 --JAVA  PHP  PYTHON RUBY LUA NODEJS

功能丰富  --发布订阅  LUA脚本  事务  pipeline(并发效率

简单 --不依赖外部库  单线程模型

多种数据结构  --字符串 hash 列表 集合 有序集合  --延申:位图BitMaps  超小内存唯一计数HyperLogLog 地理信息定位GEO

一站式学习Redis 从入门到高可用分布式实践_第3张图片

主从复制   

一站式学习Redis 从入门到高可用分布式实践_第4张图片

高可用、分布式  重点

  v2.8开始支持Redis-Sentinel(哨兵)高可用

  v3.0开始支持Redis-Cluster                分布式

一站式学习Redis 从入门到高可用分布式实践_第5张图片

Redis典型应用场景

缓存系统   

一站式学习Redis 从入门到高可用分布式实践_第6张图片

计数器

一站式学习Redis 从入门到高可用分布式实践_第7张图片

消息队列系统

一站式学习Redis 从入门到高可用分布式实践_第8张图片

排行榜

一站式学习Redis 从入门到高可用分布式实践_第9张图片

社交网络

一站式学习Redis 从入门到高可用分布式实践_第10张图片

实时系统(垃圾邮件处理,过滤器)

一站式学习Redis 从入门到高可用分布式实践_第11张图片

 Redis安装

Window 下安装

下载地址:https://github.com/MSOpenTech/redis/releases

下载解压后将redis 的路径加到系统变量的Path中

打卡一个cmd窗口启动服务:redis-server.exe

新建一个cmd窗口连接服务器:redis-cli.exe -h 127.0.0.1 -p 6379

Linux 下安装

下载地址:http://redis.io/download

下载并安装:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

下面启动redis服务.

$ cd src
$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ cd src
$ ./redis-server ../redis.conf

可执行文件说明

 

  •   redis-server Redis服务器
  •   redis-cli        Redis命令行客户端
  •   redis-benchmark  Redis性能测试
  •   redis-check-aof   AOF文件修复工具
  •   redis-check-dump  RDB文件修复工具
  •    redis-sentinel       Sentinel服务器(2.8以后)

三种启动方式

  •     最简单启动 redis-server 

    ps -ef|grep redis 

    netstat -antpl|grep redis

   redis-cli -h ip -p port        ping

  •     动态参数启动

    redis-server --port 6380 (默认6379)

  •      配置文件启动

    redis-server configPath

 比较

生产环境选择配置启动

单机多实例配置文件开源用端口号区分开

简单的客户端链接:

一站式学习Redis 从入门到高可用分布式实践_第12张图片

Redis客户端返回值

状态回复、错误回复、整数回复、(多行)字符串回复

 

Redis常用配置

deamonize   是否是守护进程默认no建议yes

prot     redis对外端口号

logfile   redis系统日志

dir      redis工作目录

配置文件方式启动

在redis目录下新建config文件夹   --mkdir config

将redis中配置文件复制进去   --cp redis.conf config

在config目录下创建对应端口服务器配置文件   --mv redis-6380.conf   --mv redis.conf redis-6380.conf

查看配置文件   --vim redis-6380.conf   --:q

对配置文件进行修改   --cat redis-6380.conf | grep -v "#" | grep -v "^$"

只留下以下参数
daemonize yes
port 6382
dir "/opt/moudels/redis/data"  ----日志位置,根据需要建立文件夹
logfile "6382.log"
保存退出   --:wq

启动服务   --redis-server config/redis-6380.conf

查看进程是否启动   --ps -ef | grep redis-server | grep 6382

查看日志   --cd data   --cat 6380.log

 

第二章 Redis API的使用和理解

2.1 Redis API的使用和理解

2.1.1 通用命令   

mset /mget      批量设置  减少了网络时间   一般而言=网络时间+命令时间

sadd myset a b c d e   将一个或多个成员元素加入到集合中

keys *      生产不适用,适用于热备从节点、scan

dbsize      计算key的总数

exists  key   检查key是否存在

expire key seconds  在seconds秒后key过期

ttl key  查看key剩余的过期时间

persist  key  去掉key的过期时间

type  key     返回key的类型

2.1.2 数据结构和内部编码

时间 <=> 空间

一站式学习Redis 从入门到高可用分布式实践_第13张图片

一站式学习Redis 从入门到高可用分布式实践_第14张图片

2.1.3 单线程架构

单线程为什么这么块?

       1.纯内存,响应速度快

        2.非阻塞IO

        3.避免现场切换和竟态消耗

注意事项:

       1.一次只执行一条命令

       2.拒绝长/慢命令

       3.其实不是单线程

一站式学习Redis 从入门到高可用分布式实践_第15张图片

 

2.2 字符串类型

使用场景:缓存、计数器、分布式锁...

命令:

 incr  key                 #自增1

decr key                  #自减1

incrby key k             #自增k   

decrby key k            #自减k

set key value           #不管key是否存在,都设置

setnx key value        #key不存在,才设置

set key value xx       #key存在,才设置

getset  key newvalue  #set key newvalue并返回旧的value

append key value       #将value追加到旧的value

strlen  key                   #返回字符串的长度

incrbyfloat key 3.5       #增加key对应的值3.5

getrange key start  end  #获取字符串指定下标的所有值

setrange key index value #设置指定下标所对应的值

一站式学习Redis 从入门到高可用分布式实践_第16张图片

实战:缓存视频

一站式学习Redis 从入门到高可用分布式实践_第17张图片

一站式学习Redis 从入门到高可用分布式实践_第18张图片

 

2.3 哈希类型

哈希键值结构

一站式学习Redis 从入门到高可用分布式实践_第19张图片

命令:

hdel key field1 [field2] :删除一个或多个字段

hexists key field :查看字段是否存在

hget key field :获取指定字段的值

hgetall key :获取所有字段和值

hincrby key field increment :字段的整数值加上增量 increment 。

hkeys key 获取所有哈希表中的字段

hlen key 获取哈希表中字段的数量

hmget key field1 [field2] 获取所有给定字段的值

hmset key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。

hset key field value 将哈希表 key 中的字段 field 的值设为 value 。

hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。

hvals key 获取哈希表中所有值

hscan key cursor [MATCH pattern] [COUNT count] :迭代哈希表中的键值对。

string VS hash:

 

一站式学习Redis 从入门到高可用分布式实践_第20张图片

一站式学习Redis 从入门到高可用分布式实践_第21张图片

一站式学习Redis 从入门到高可用分布式实践_第22张图片

一站式学习Redis 从入门到高可用分布式实践_第23张图片

 

一站式学习Redis 从入门到高可用分布式实践_第24张图片

 

2.4 列表类型

有序 可以重复

lpush和rpush  从左边/右边插入

lpop和rpop 从左边/右边弹出

lrem  key  count value  移除多少个value相等元素,count>0从左,count<0从右,count=0删除所有

ltrim  key  start   end  按照索引范围进行修减列表,只保留下标索引从start到end元素

linsert  listkey  before|after  pivot value  在元素pivot之前/之后插入value

lrange  key  start   end 获取指定范围内的元素

lindex key index 获取下标索引的元素

blpop key1 [key2 ] timeout 移出并获取列表首元素, 没有元素会阻塞列表直到超时或发现元素。

brpop key1 [key2 ] timeout 移出并获取列表尾元素, 没有元素会阻塞列表直到超时或发现元素。

lpush + lpop = Stack(栈)

lpush + rpop = Queue(队列)

lpush + ltrim = Capped Collection(有限制的列表)

lpush + brpop = Message Queue(消息队列)

实战:微博新消息-lpush

 

 

2.5 集合类型

无序 无重复  支持集合间操作

sadd  添加   srem  删除

scard key 获取集合的成员数

spop  移除并返回随机一个元素

srandmember  返回集合中一个或多个随机数

sismember key member 判断元素是否是集合 key 的成员

smembers  返回集合中的所有成员

sinter 取出两个集合相同的元素

sdiff   取出两个集合的差集

sunion 取出两个集合的并集

实战:随机抽奖-spop/srandmember ,添加标签-sadd,共同关注-sinter

一站式学习Redis 从入门到高可用分布式实践_第25张图片

 

 

2.6 有序集合类型

有序集合结构

一站式学习Redis 从入门到高可用分布式实践_第26张图片

命令:

zadd key score1 member1 添加/更新 一/多个成员

zcard key 获取成员数

zcount  key min max 计算区间内成员数

zincrby key increment member 对指定成员的分数加上增量 increment 

zincrby destination numkeys key [key ...] 计算一/多个有序集的交集并存储在新的有序集合 key 中

zrem key member [member ...] 移除有序集合中的一个或多个成员

zremrangebyrank  key start  end   删除指定排名内的升序元素

zremrangebyscore  key minScore maxScore  删除指定分数内的升序元素 

zrange key start stop 返回索引区间内的成员

zrank key member 返回有序集合中指定成员的索引

zrevrange key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底

zscore key member 返回有序集中,成员的分数值

zunionstoredestination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中

zscan key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

zrangebylex key min max [LIMIT offset count] 返回value在区间内的成员,(为不包括,[为包括,-为小于

一站式学习Redis 从入门到高可用分布式实践_第27张图片

zrangebyscore key min max [WITHSCORES] [LIMIT]  返回score在区间内的成员,(1 5 表示1 < score <= 5
一站式学习Redis 从入门到高可用分布式实践_第28张图片

实战:排行榜

总结

一站式学习Redis 从入门到高可用分布式实践_第29张图片一站式学习Redis 从入门到高可用分布式实践_第30张图片

 

第三章 Redis客户端

Java客户端 Jedis

maven依赖


          redis.clients
          jedis
          2.9.0
      

import redis.clients.jedis.Jedis;
public class RedisTest {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("192.168.136.158",6380);
        System.out.println("连接成功");
        //设置 redis 字符串数据
        jedis.set("runoobkey", "www.runoob.com");
        // 获取存储的数据并输出
        System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
    }
}
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;
 
public class jedis {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
        //jedis.set("mykey", "root");
        //System.out.println("redis 存储的字符串为: "+ jedis.get("mykey"));
        
        /*jedis.lpush("word", "one");
        jedis.lpush("word", "two");
        List lists = jedis.lrange("word", 0 ,-1);
        for(int i=0; i keys = jedis.keys("*");
        Iterator it = keys.iterator();
        while(it.hasNext()){
            String akey = it.next();
            System.out.println(akey);
        }
    }
}

一站式学习Redis 从入门到高可用分布式实践_第31张图片

一站式学习Redis 从入门到高可用分布式实践_第32张图片

一站式学习Redis 从入门到高可用分布式实践_第33张图片

一站式学习Redis 从入门到高可用分布式实践_第34张图片

一站式学习Redis 从入门到高可用分布式实践_第35张图片

Jedis直连和连接池连接

 一站式学习Redis 从入门到高可用分布式实践_第36张图片一站式学习Redis 从入门到高可用分布式实践_第37张图片

一站式学习Redis 从入门到高可用分布式实践_第38张图片

 连接池的使用

一站式学习Redis 从入门到高可用分布式实践_第39张图片

一站式学习Redis 从入门到高可用分布式实践_第40张图片

Jedis配置优化

commons-pool配置:

资源数控制

一站式学习Redis 从入门到高可用分布式实践_第41张图片

借还参数

一站式学习Redis 从入门到高可用分布式实践_第42张图片

maxTotal

一站式学习Redis 从入门到高可用分布式实践_第43张图片

一站式学习Redis 从入门到高可用分布式实践_第44张图片

合适的maxIdle和minIdle

一站式学习Redis 从入门到高可用分布式实践_第45张图片

常见问题:连接超时,资源耗尽

一站式学习Redis 从入门到高可用分布式实践_第46张图片

一站式学习Redis 从入门到高可用分布式实践_第47张图片

解决思路:

一站式学习Redis 从入门到高可用分布式实践_第48张图片

一站式学习Redis 从入门到高可用分布式实践_第49张图片

一站式学习Redis 从入门到高可用分布式实践_第50张图片

 

 

第四章 瑞士军刀 Redis

4.1  慢查询 

作用

将查询时间超过一定限制的语句记录到日志中,找到系统中瓶颈的命令

客户端请求的生命周期

一站式学习Redis 从入门到高可用分布式实践_第51张图片

两点说明:

1.慢查询发生在第三阶段,判断依据是执行时长

2.客户端超时不一定慢查询(四个步骤都可能),但慢查询是客户端超时的一个可能因素

两个配置

config get slowlog-max-len=128  先进先出队列   通常设置1000,固定长度、保存在内存中

一站式学习Redis 从入门到高可用分布式实践_第52张图片

 

config get slowlog-log-slower-than=10000  慢查询阈值,单位微秒,即10ms,通常设置1ms

     =0即记录所有命令(查看命令所用时间),<0即不记录任何命令

一站式学习Redis 从入门到高可用分布式实践_第53张图片

慢查询命令

slowlog get [n] 获取慢查询队列

slowlog len   获取慢查询队列长度  队列里面有多少慢查询

slowlog reset   清空慢查询队列

定期持久化慢查询

动态配置

config set slowlog-max-len 1000

config set slowlog-log-slower-than 1000

4.2pipeline 流水线

作用

提高客户端的效率,减少网络时间的消耗

一站式学习Redis 从入门到高可用分布式实践_第54张图片

流水线的作用

一站式学习Redis 从入门到高可用分布式实践_第55张图片

注意:

redis命令是微秒级别

pipeline每次条数要控制(网络)

pipeline-Jedis使用

maven依赖

一站式学习Redis 从入门到高可用分布式实践_第56张图片

不使用pipeline,1w hset -> 50s

一站式学习Redis 从入门到高可用分布式实践_第57张图片

使用pipeline,1w hset -> 0.7s

一站式学习Redis 从入门到高可用分布式实践_第58张图片

使用建议:

注意每次pipeline携带数据量

pipeline每次只能作用在一个redis节点上

M操作与pipeline区别

一站式学习Redis 从入门到高可用分布式实践_第59张图片

一站式学习Redis 从入门到高可用分布式实践_第60张图片

 

 

4.3 发布订阅

 角色:发布者 订阅者 频道 

订阅者可以订阅多频道,但无法接收到订阅前的消息

一站式学习Redis 从入门到高可用分布式实践_第61张图片

命令

subscribe channel [channel ...] 订阅一个或多个频道的信息

publish channel message 信息发送到指定的频道

unsubscribe [channel [channel ...]] 指退订给定频道

Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列

消息队列 要抢   比如红包  

发布订阅  都有   比如公告

一站式学习Redis 从入门到高可用分布式实践_第62张图片

 

4.4 Bitmap 位图

作用:减少内存的方案

一站式学习Redis 从入门到高可用分布式实践_第63张图片

一站式学习Redis 从入门到高可用分布式实践_第64张图片

命令

setbit key offset value  设置指定位置偏移量为0/1

一站式学习Redis 从入门到高可用分布式实践_第65张图片

一站式学习Redis 从入门到高可用分布式实践_第66张图片

getbit  key offset  获取指定位的值

bitcount key [start end]  获取指定范围值为1的个数,不指定则为全部

bitop op destkey key [key...] 做多个Bitmap的and(交集)、or(并集)、not(非)、xor(异或),并将结果保存在destkey

bitpos key targetBit [start] [end]  计算范围内,偏移量等于targetBit的,第一个位置,不指定范围则为全部

实战:独立用户统计

1亿用户,5千五独立,使用set和Bitmap区别

只有10万独立用户

使用经验

type=string,最大512MB

注意setbit时的偏移量,可能有较大耗时

位图不是绝对好

 

 

4.5 HyperLogLog 

作用

极小空间完成独立数据统计,用来做基数统计(不重复元素统计)的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的,本质还是字符串

命令

pfadd key element [element ...]  添加指定元素到 HyperLogLog 中

pfcount key [key ...]  返回给定 HyperLogLog 的基数估算值

pfmerge destkey sourcekey [sourcekey ...]  将多个 HyperLogLog 合并为一个 HyperLogLog

使用经验

是否能容忍错误,基数估计就是在误差可接受的范围内,快速计算基数。

是否需要单挑数据

 

 

4.6 GEO 地理信息

作用

用于存储经纬度,计算两地距离,范围计算等,  其实zset类型实现

命令

geoadd key 经度longitude 纬度latitude 城市member  添加地理位置信息

一站式学习Redis 从入门到高可用分布式实践_第67张图片

geopos key member 获取地理位置信息

一站式学习Redis 从入门到高可用分布式实践_第68张图片

geodist key member1 member2[unit] 获取两地距离,单位m、km、mi(英里)、ft(尺)

 

一站式学习Redis 从入门到高可用分布式实践_第69张图片

 

 一站式学习Redis 从入门到高可用分布式实践_第70张图片

 

参考:https://www.cnblogs.com/jiang910/p/10020048.html

 

你可能感兴趣的:(redis)