• linux安装redis及phpredis环境配置


    下载安装包

      cd /home/redis/tar

       wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz

       tar zxvf redis-2.4.17.tar.gz

       cd redis-2.4.17

       make 

       cd src 

       make install

       在该目录会看到以下文件

        

    redis-benchmark      压力测试

    redis-check-aof       检查redis持久化命令文件的完整性

    redis-check-dump   检查redis持久化数据文件的完整性

    redis-cli                  redis在linux上的客户端

    redis-sentinel          做集群用的

    redis-server            linux上的服务端

    将redis源码目录下的  src目录里的 redis-cli和 redis-server 拷贝到工作目录里.同时将源码根目录下的redis.conf 也拷贝到工作目录里

    mkdir -p /usr/local/redis

    mkdir -p /usr/local/redis

    cp /home/redis/tar/redis-2.4.17/redis.conf /usr/local/redis

    cd /home/redis/tar/redis-2.4.17/src

    cp mkreleasehdr.sh redis-benchmak redis-check-aof redis-check-dump redis-cli redis-server   /usr/local/redis

    启动redis服务器:

     cd /usr/local/redis

     vi ./redis.conf

    把参数daemonize no 改为 daemonize yes

     ./redis-server redis.conf

    查看redis 是否启动成功

    ps -ef | grep redis

    netstat -tunpl |grep 6379

    关闭redis

    pkill redis-server

    二. redis配置文件说明

    /usr/local/redis/redis.conf

    1 daemonize  no

    默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes

    2 pidfile  /var/run/redis.pid

    当Redis 在后台运行的时候,Redis 默认会把pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis 服务时,需要指定不同的pid 文件和端口

    3 port

    监听端口,默认为6379

    4 #bind 127.0.0.1

    指定Redis 只接收来自于该IP 地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中为了安全最好设置该项。默认注释掉,不开启

    5 timeout 0

    设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

    tcp-keepalive 0

    指定TCP连接是否为长连接,"侦探"信号有server端维护。默认为0.表示禁用

    7 loglevel notice

    log 等级分为4 级,debug,verbose, notice, 和warning。生产环境下一般开启notice

    8 logfile stdout

    配置log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上,也可以修改为日志文件对应的目录地址

    9 databases 16

    设置数据库的个数,可以使用SELECT 命令来切换数据库。默认使用的数据库是0号库。默认16个库

    10

    save 900 1

    save 300 10

    save 60 10000

    保存数据快照的频率,即将数据持久化到dump.rdb文件中的频度。用来描述"在多少秒期间至少多少个变更操作"触发snapshot数据保存动作

    默认设置,意思是:

    if(在60 秒之内有10000 个keys 发生变化时){

    进行镜像备份

    }else if(在300 秒之内有10 个keys 发生了变化){

    进行镜像备份

    }else if(在900 秒之内有1 个keys 发生了变化){

    进行镜像备份

    }

    11 stop-writes-on-bgsave-error yes

    当持久化出现错误时,是否依然继续进行工作,是否终止所有的客户端write请求。默认设置"yes"表示终止,一旦snapshot数据保存故障,那么此server为只读服务。如果为"no",那么此次snapshot将失败,但下一次snapshot不会受到影响,不过如果出现故障,数据只能恢复到"最近一个成功点"

    12 rdbcompression yes

    在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大,有利于存储/备份/传输/数据恢复

    13 rdbchecksum yes

    读取和写入时候,会损失10%性能

    14 rdbchecksum yes

    是否进行校验和,是否对rdb文件使用CRC64校验和,默认为"yes",那么每个rdb文件内容的末尾都会追加CRC校验和,利于第三方校验工具检测文件完整性

    14 dbfilename dump.rdb

    镜像备份文件的文件名,默认为 dump.rdb

    15 dir ./

    数据库镜像备份的文件rdb/AOF文件放置的路径。这里的路径跟文件名要分开配置是因为Redis 在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,再把该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中

    16 # slaveof <masterip> <masterport>

    设置该数据库为其他数据库的从数据库,并为其指定master信息。

    17 masterauth

    当主数据库连接需要密码验证时,在这里指定

    18 slave-serve-stale-data yes

    当主master服务器挂机或主从复制在进行时,是否依然可以允许客户访问可能过期的数据。在"yes"情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期;在"no"情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知"error"

    19 slave-read-only yes

    slave是否为"只读",强烈建议为"yes"

    20 # repl-ping-slave-period 10

    slave向指定的master发送ping消息的时间间隔(秒),默认为10

    21 # repl-timeout 60

    slave与master通讯中,最大空闲时间,默认60秒.超时将导致连接关闭

    22 repl-disable-tcp-nodelay no

    slave与master的连接,是否禁用TCP nodelay选项。"yes"表示禁用,那么socket通讯中数据将会以packet方式发送(packet大小受到socket buffer限制)。

    可以提高socket通讯的效率(tcp交互次数),但是小数据将会被buffer,不会被立即发送,对于接受者可能存在延迟。"no"表示开启tcp nodelay选项,任何数据都会被立即发送,及时性较好,但是效率较低,建议设为no

    23 slave-priority 100

    适用Sentinel模块(unstable,M-S集群管理和监控),需要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举

    24 # requirepass foobared

    设置客户端连接后进行任何其他指定前需要使用的密码。警告:因为redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

    25 # rename-command CONFIG 3ed984507a5dcd722aeade310065ce5d    (方式:MD5('CONFIG^!'))

    重命名指令,对于一些与"server"控制有关的指令,可能不希望远程客户端(非管理员用户)链接随意使用,那么就可以把这些指令重命名为"难以阅读"的其他字符串

    26 # maxclients 10000

    限制同时连接的客户数量。当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到error 信息。默认为10000,要考虑系统文件描述符限制,不宜过大,浪费文件描述符,具体多少根据具体情况而定

    27 # maxmemory <bytes>

    redis-cache所能使用的最大内存(bytes),默认为0,表示"无限制",最终由OS物理内存大小决定(如果物理内存不足,有可能会使用swap)。此值尽量不要超过机器的物理内存尺寸,从性能和实施的角度考虑,可以为物理内存3/4。此配置需要和"maxmemory-policy"配合使用,当redis中内存数据达到maxmemory时,触发"清除策略"。在"内存不足"时,任何write操作(比如set,lpush等)都会触发"清除策略"的执行。在实际环境中,建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/slave中"maxmemory""policy"配置一致。

    当内存满了的时候,如果还接收到set 命令,redis 将先尝试剔除设置过expire 信息的key,而不管该key 的过期时间还没有到达。在删除时,

    将按照过期时间进行删除,最早将要被过期的key 将最先被删除。如果带有expire 信息的key 都删光了,内存还不够用,那么将返回错误。这样,redis 将不再接收写请求,只接收get 请求。maxmemory 的设置比较适合于把redis 当作于类似memcached的缓存来使用。

    28 # maxmemory-policy volatile-lru

    内存不足"时,数据清除策略,默认为"volatile-lru"。

    volatile-lru  ->对"过期集合"中的数据采取LRU(近期最少使用)算法.如果对key使用"expire"指令指定了过期时间,那么此key将会被添加到"过期集合"中。将已经过期/LRU的数据优先移除.如果"过期集合"中全部移除仍不能满足内存需求,将OOM.
    allkeys-lru ->对所有的数据,采用LRU算法
    volatile-random ->对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止. 如果如果"过期集合"中全部移除全部移除仍不能满足,将OOM
    allkeys-random ->对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止
    volatile-ttl ->对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据.
    noeviction ->不做任何干扰操作,直接返回OOM异常
    另外,如果数据的过期不会对"应用系统"带来异常,且系统中write操作比较密集,建议采取"allkeys-lru"

    29 # maxmemory-samples 3

    默认值3,上面LRU和最小TTL策略并非严谨的策略,而是大约估算的方式,因此可以选择取样值以便检查

    29 appendonly no

    默认情况下,redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。所以redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。如果不经常进行数据迁移操作,推荐生产环境下的做法为关闭镜像,开启appendonly.aof,同时可以选择在访问较少的时间每天对appendonly.aof 进行重写一次。

    另外,对master机器,主要负责写,建议使用AOF,对于slave,主要负责读,挑选出1-2台开启AOF,其余的建议关闭

    30 # appendfilename appendonly.aof

    aof文件名字,默认为appendonly.aof

    31 

    # appendfsync always
    appendfsync everysec
    # appendfsync no

    设置对appendonly.aof 文件进行同步的频率。always 表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。no不主动fsync,由OS自己来完成。这个需要根据实际业务场景进行配置

    32 no-appendfsync-on-rewrite no

    在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被立即同步

    33 auto-aof-rewrite-percentage 100

    当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。

    34 auto-aof-rewrite-min-size 64mb

    触发aof rewrite的最小文件尺寸

    35 lua-time-limit 5000

    lua脚本运行的最大时间

    36 slowlog-log-slower-than 10000

    "慢操作日志"记录,单位:微秒(百万分之一秒,1000 * 1000),如果操作时间超过此值,将会把command信息"记录"起来.(内存,非文件)。其中"操作时间"不包括网络IO开支,只包括请求达到server后进行"内存实施"的时间."0"表示记录全部操作

    37 slowlog-max-len 128

    "慢操作日志"保留的最大条数,"记录"将会被队列化,如果超过了此长度,旧记录将会被移除。可以通过"SLOWLOG <subcommand> args"查看慢记录的信息(SLOWLOG get 10,SLOWLOG reset)

    38

     hash-max-ziplist-entries 512

    hash类型的数据结构在编码上可以使用ziplist和hashtable。ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样.因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。

    这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128
    hash-max-ziplist-value 64

    ziplist中允许条目value值最大字节数,默认为64,建议为1024

    39 

    list-max-ziplist-entries 512
    list-max-ziplist-value 64

    对于list类型,将会采取ziplist,linkedlist两种编码类型。解释同上。

    40 set-max-intset-entries 512

    intset中允许保存的最大条目个数,如果达到阀值,intset将会被重构为hashtable

    41 

    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64

    zset为有序集合,有2中编码类型:ziplist,skiplist。因为"排序"将会消耗额外的性能,当zset中数据较多时,将会被重构为skiplist。

    42 activerehashing yes

    是否开启顶层数据结构的rehash功能,如果内存允许,请开启。rehash能够很大程度上提高K-V存取的效率

    43 

    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60

    客户端buffer控制。在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除。

    buffer控制类型包括:normal -> 普通连接;slave ->与slave之间的连接;pubsub ->pub/sub类型连接,此类型的连接,往往会产生此种问题;因为pub端会密集的发布消息,但是sub端可能消费不足.
    指令格式:client-output-buffer-limit <class> <hard> <soft> <seconds>",其中hard表示buffer最大值,一旦达到阀值将立即关闭连接;
    soft表示"容忍值",它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也将立即关闭连接,如果超过了soft但是在seconds之后,buffer数据小于了soft,连接将会被保留.
    其中hard和soft都设置为0,则表示禁用buffer控制.通常hard值大于soft.

    44 hz 10

    Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。"间歇性task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于0且小于500。此值过小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。

    45 

    # include /path/to/local.conf
    # include /path/to/other.conf

    额外载入配置文件。

     phpredis扩展安装

       phpredis中文手册:

      http://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html

      下载phpredis

       https://github.com/owlient/phpredis

       cd /home/redis/tar

       tar phpredis.tar.gz

       cd phpredis.tar.gz

       /usr/local/php/bin/phpize    #此指令必须在phpredis解压包/home/redis/tar/phpredis 执行

    安装autoconf-2.62.tar.gz

     cd /home/redis/tar

     tar zxvf autoconf-2.62.tar.gz

     cd autoconf-2.62

     ./configure && make && make install

      

      配置并编译安装phpredis

     ./configure --with-php-config=/usr/local/php/bin/php-config

      make && make install

      

     

    nginx 为php安装redis扩展
    获取源码包
    wget https://github.com/nicolasff/phpredis/archive/master.zip
    或https://github.com/owlient/phpredis
    unzip master.zip
    cd phpredis-master/
    /application/php/bin/phpize #如果是yum安装php-devel 那么直接使用phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config #如果是yum安装的php 直接。、configure
    make
    make install
    修改/etc/php.ini
    添加
    extension_dir ="/usr/lib64/php/modules/"
    extension=redis.so
    重启php
    /etc/init.d/php-fpm restart

    给php.ini设置redis扩展

       打开php.ini配置文件设置以下代码

       vi /usr/local/php/etc/php.ini

       

       重启apache

       /usr/local/http2/bin/apachectl restart

    查看php是否有引入redis扩展

     

    php使用redis示例代码

    如果不清楚php-redis扩展内部到底有什么方法可以利用反射

    String类型

    set 设置key对应的值为string类型的value

    get 获取key对应的string值,如果key不存在返回nil

    setnx 设置key对应的值为string类型的value 如果key已经存在 返回0,nx是not exist的意思

    setex设置key对应的值为string类型的value 并指定此键值对应的有效期

    例如:我们添加一个color=red的键值对并指定有效期为10秒

    setrange 设置指定key的value值的子字符串

    mset 一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置

    msetnx 一次设置多个key的值,成功返回ok表示所有的值都被设置了,失败返回0表示没有任何值被设置(其中的key已存在),不会覆盖已存在的key

    getset 设置key的值,并返回key的旧值

    getrange获取key的value值的子字符串

    mget 一次获取多个key的值,如果对应的key不存在则对应返回nil

     incr对key的值做加加操作,并返回新的值

    incrby同incr类似,加指定的值,key不存在时候会设置key,并认为原来的value是0.

    decr 对key的值做减减操作

    decrby 同decr类似减指定的值

    append 给指定key的字符串追加value,返回新字符串值的长度

    strlen取指定key的value值的长度

    hash类型

    redis hash是一个string类型的field和value的映射表。它的添加 删除操作都是0(1) hash特别适合用于存储对象,相比较于将对象的每个字段存成string类型。将一个对象存储在hash类型中会占用更少的内存。并且可以更方便的存取整个对象。

     hset设置hash field为指定值,如果key不存在则先创建

    hsetnx设置hash field为指定值,如果key不存在,则先创建。如果存在返回0.

    hmset 同时设置hash的多个field的值,设置成功返回ok

    hget 获取hash field的值

    hmget 获取全部指定的hash field field1 的值

    hincrby 指定的hash field 加上给定的值

    hexists 测试指定的field是否存在 如果存在返回1 否则返回0

    hlen 返回指定hash的field数量

    hdel 删除指定hash的field

    hkeys 返回hash的所有field

    hvals 返回hash的所有value

    hgetall获取某个hash中全部的field及value

    list类型

    list是一个链表结构主要功能是push  pop 获取一个范围的所有值等等。操作中key理解为链表的名字。redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push pop操作从链表的头部或者尾部添加删除元素。这样list既可以作为栈,又可以作为队列。

    lpush 在key对应list的头部添加字符串元素  先进后出原则

    rpush 在key对应的list的尾部添加字符串元素   先进先出原则

    linsert 在key对应list的特定位置前或后添加字符串

    lset设置list中指定下标的元素值

    lrem 从key对应的list中删除n个和value相同的元素(n<0从尾删除,n=0全部删除)

    ltrim 保留指定key的值范围内的数据删除其他的值

    ltrim list1 1 -1 从下标1开始保留全部的数据 1 2 从下标1开始保留两个数据

    lpop从list的头部删除元素,并返回删除元素

    rpop从list的尾部删除元素,并返回删除元素

    rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部

    lindex 返回名称为key的list中index位置的元素

    llen 返回key对应list的长度

     set类型

    set是集合,它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找的复杂度都是0(1).对集合我们可以取并集,交集,差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能

    sadd 向名称为key的set中添加元素

    srem 删除名称为key的set中的元素

    spop随机返回并删除名称为key的set中一个元素

    sdiff 返回所有给定key与第一个key的差集

    sdiffstore返回所有给定key与第一个key的差集,并将结果存为另一个key

    sinter 返回所有给定key的交集

    sinterstore返回所有给定key的交集,并将结果存为另一个key

    sunion 返回所有给定key的并集

    sunionstore 返回所有给定key的并集并存储为myset7

    smove 从第一个key对应的set中移除member并添加到第二个对应的set中

    scard 返回名称为key的set的元素个数

    sismember 测试member是否是名称为key的set元素

    srandmember 随机返回名称为key的set的一个元素,但不删除元素

    sorted set类型

    sorted set是set的一个升级版本,它在set的基础上增加一个顺序属性,这个属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序,可以理解为有两列的mysql表,一列存value.一列存顺序,操作key理解为zset的名字。

    zadd向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序。

    zrang读取zset中的值。withscores 取顺序号

    zrem删除名称为key的zset中的元素member

    zincrby如果在名称为key的zset中已经存在元素member,则该元素的score增加increment否则向该集合中添加该元素,其score的值为increment

    zrank 返回zset集合value的索引值

    zrevrank返回名称为key的zset中member元素的排名(按score从大到小排序)即下标

    zrevrange 返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素

    zrangebyscore 返回指定下标的值

    zcount 返回集合中给定区间的数量

    zcard 返回集合中元素的个数

    zremrangebyrank 删除集合中排名在给定区间的元素(按索引)

    zremrangebyscore 删除集合中score在给定区间的元素(按顺序号)

     redids中键值相关命令

    keys 返回满足给定pattern的所有key  用表达式*,代表取出所有的key

    exists 确认一个key是否存在 存在返回1 不存在返回0

    del 删除一个key

    expire 设置一个key的过期时间  ttl 查看key的剩余过期时间 为-1 表示已经过期

    select 是选择数据库   select 0  数据库0-15

    move 将当前数据库中的key转移到其他数据库中

    persist 移除给定key的过期时间

    randomkey 随机返回key空间的一个key

    rename 重命名key

    type 返回值的类型

    服务器相关命令

    ping 测试连接是否存活

    quit或exit 退出连接

    dbsize 返回当前数据库中key的数目

    info 获取服务器的信息和统计

    config get 实时存储收到的请求

    config get dir 获取dir这个参数配置的值如果想获取全部参数数据的 配置值也很简单,只需要执行 config get *j

    即可将全部值都显示出来

    flushdb 删除当前选择数据库中的所有key

    flushall 删除所有数据库中的所有key

    redis高级使用特性

    1.安全性

    设置客户端连接后进行任何其他指定前需要输入密码。

      因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试。这意味着你需要指定非常非常强大的密码来防止暴力破解。

     vi  /usr/local/redis/redis.conf

      添加 requirepass = ceshi

     

      pkill redis-server

      重启redis

     /usr/local/redis/redis-server  /usr/local/redis/redis.conf

     /usr/local/redis/redis-cli -a ceshi

     auth mima 设置权限  就是登陆客户端的时候没有指定 -a

     

     

    redis主从复制过程

     1.slave与master建立连接,发送sync同步命令

     2、master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。

     3、后台完成保存后,就将此文件发送给slave

     4、slave将此文件保存到硬盘上

    配置主从服务器:

     配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:

     slaveof 192.168.1.1 6379 #指定master的ip和端口

     masterauth ceshi #这是主机的密码

    在redis_slave 服务器的/usr/local/redis/redis.conf

    重启redis_slave服务的redis

    redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行。而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时。这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。

    discard 取消事务

    当事务中任何一个出错 但redis的事务不会全部回滚

    乐观锁复杂事务控制

    redis 持久化机制

    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化

    1.snapshotting(快照)也是默认方式

    2.Append-onlyfile(缩写aof)的方式

    配置文件中添加 relly-use-vm yes

     

  • 相关阅读:
    0STM32F407+ESP8266基本控制篇(自建物联网平台)整体运行测试微信小程序使用APUConfig配网绑定ESP8266,并通过MQTT实现远程通信控制
    0STM32F407+ESP8266基本控制篇(自建物联网平台)整体运行测试Android使用APUConfig配网绑定ESP8266,并通过MQTT实现远程通信控制
    14STM32F407+ESP8266基本控制篇(自建物联网平台)STM32F407+ESP8266以SSL单向认证方式连接MQTT服务器(不验证服务器证书)
    003STM32F407+ESP8266基本控制篇(阿里云物联网平台)在阿里云物联网平台上一型一密动态注册设备(STM32F407+ESP8266)
    02STM32F407+ESP8266基本控制篇(自建物联网平台)硬件使用说明
    001STM32F407+ESP8266基本控制篇(阿里云物联网平台)C#,网页,android,微信小程序,单片机等使用MQTT接入阿里云物联网平台
    6STM32+ESP8266+Air302远程升级篇(自建物联网平台)STM32通过air302使用http下载程序文件,升级程序(手机APP控制更新)
    4STM32+ESP8266+Air302远程升级篇(自建物联网平台)STM32通过ESP8266使用http或https下载程序文件,升级程序(手机APP控制更新)
    3STM32+ESP8266+Air302远程升级篇(自建物联网平台)STM32+mbedtls通过air302使用https下载程序文件,升级程序(单片机程序轮训检查更新)
    面试官:你真的了解Redis分布式锁吗?
  • 原文地址:https://www.cnblogs.com/chenchenphp/p/6388169.html
Copyright © 2020-2023  润新知