zoukankan      html  css  js  c++  java
  • redis

    redis
    Remote DIctionary Server
    nosql,键值存储,可持久存储;高级的kv存储和数据结构存储(列表,字典,哈希表,集合...);数据集是保存在内存中,所以访问性能很好;周期性的将内存中的数据写到磁盘中,以实现数据的持久性功能;单线程服务器(只有一个进程或线程);支持在服务器端运行Lua脚本;支持主从模式;支持cluster技术;
    redis
    KV cache and store:
    in-memory
    持久化
    主从(借助于sentinel实现一定意义上的HA)
    Clustering(分布式)
    数据结构服务器:
    string,List,Hash,Set,sorted Set(有序集合),bitmaps,HyperLogLog
    memcached
    内存中的cache,不提供持久存储能力;多线程;
    redis优势:
    丰富的操作:hashs,sets,sorted sets,hyperloglog等
    內建replication(复制)及cluster
    就地更新操作
    支援持久化(磁盘):避免雪崩效应
    memcached优势:
    多线程:善用多核CPU;更少的阻塞操作
    更少的内存开销
    更少的内存分配压力
    可能有更少的内存碎片
    存储系统有三类:
    RDBMS:关系型数据库:oracle,db2,postgresql,mysql,sql server
    NoSQL:非关系型:hbase,mongodb,memcached,redis,cassandra
    NewSQL:分布式:aerospike,foundationdb,rethinkdb
    ----------------------------------------------
    redis安装
    epel源
    yum install -y redis
    rpm -ql redis
    /etc/rc.d/init.d/redis
    /etc/rc.d/init.d/redis-sentinel
    /etc/redis-sentinel.conf
    /etc/redis.conf
    /etc/security/limits.d/95-redis.conf
    /usr/bin/redis-benchmark
    /usr/bin/redis-check-aof
    /usr/bin/redis-check-rdb
    /usr/bin/redis-cli
    /usr/bin/redis-sentinel
    /usr/bin/redis-server
    /usr/libexec/redis-shutdown
    配置文件:
    /etc/redis.conf
    启动:
    service redis restart
    lsof -i:6379
    进入redis:
    redis-cli -h 192.168.1.114
    帮助:
    查看命令组帮助:help @STRING (help @按tab键补全)
    查看某命令帮助:help @command help @list
    CLIENT LIST:列出所有的client
    SELECT 1:进入1号数据库(默认是0)
    SET disto centos 设置disto的值为centos
    GET disto 查看disto的值
    append disto rhel 设置disto为多个值,另一只值为rhel
    STRLEN disto 查看disto值的长度
    SETEN disto centos 该键值不存在时,才设定值为centos(若已经存在则该操作未能执行)
    SETXX disto centos 当该键值存在时,设定新的值为centos(若不存在则该操作未能执行)
    keys * 查看所有的key
    INCR
    DECR
    列表LIST操作:
    LPUSH:lpush(key, value):在名称为key的list头添加一个值为value的 元素
    RPUSH:rpush(key, value):在名称为key的list尾添加一个值为value的元素
    LPOP:返回并删除名称为key的list中的首元素
    RPOP:返回并删除名称为key的list中的尾元素
    LINDEX:lindex(key, index):返回名称为key的list中index位置的元素
    LSET:lset(key, index, value):给名称为key的list中index位置的元素赋值
    llen(key):返回名称为key的list的长度
    lrem(key, count, value):删除count个key的list中值为value的元素
    集合SET操作
    sadd(key, member):向名称为key的set中添加元素member
    sinter(key1, key2,…key N) :求集合的交集
    sunion(key1, (keys)) :求并集
    spop(key) :随机返回并删除名称为key的set中一个元素
    sismember(key, member) :member是否是名称为key的set的元素
    srem(key, member) :删除名称为key的set中的元素member
    smove(srckey, dstkey, member) :移到集合元素
    scard(key) :返回名称为key的set的基数
    sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
    sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
    sdiff(key1, (keys)) :求差集
    sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
    smembers(key) :返回名称为key的set的所有元素
    srandmember(key) :随机返回名称为key的set的一个元素
    有序集合Sorted-sort
    zadd:向集合中添加一个元素
    ZADD weekday1 1 mon 2 tue 3 wed
    zcard:返回所有元素个数
    zcard weekday1
    zrank:按照索引排序 ,返回索引值
      zrank weekday1 tue 查看集合weekday1中元素tue对应的索引号
    zrange
        zrange weekday1 0 2 显示集合weekday1中的第1到第3个元素
    Hash操作:
    hset(key, field, value):向名称为key的hash中添加元素field
    hget(key, field):返回名称为key的hash中field对应的value
    hmget(key, (fields)):返回名称为key的hash中field i对应的value
    hmset(key, (fields)):向名称为key的hash中添加元素field 
    hkeys(key):返回名称为key的hash中所有键
    hvals(key):返回名称为key的hash中所有键对应的value
    hdel(key, field):删除名称为key的hash中键为field的域
    hincrby(key, field, integer):将名称为key的hash中field的value增加integer
    hexists(key, field):名称为key的hash中是否存在键为field的域
    hlen(key):返回名称为key的hash中元素个数
    hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
    #################################################################################
    基于认证访问redis
    vim /etc/redis.conf
    requirepass password
    redis-cli -h 192.168.1.114
    --->AUTH password
    清空数据库:
    FLUSHDB:清空当前库
    FLUSHALL:清空所有库
    事务:一组相关的操作,是一致性的,要么都执行,要么都不执行
    通过MULTI,EXEC,WATCH等命令实现事务功能:将一个或多个命令归并为一个操作提请服务器按顺序执行的机制;不支持回滚操作;
    MULTI:启动一个事务
    多个命令会放在队列中
    EXEC:执行事务:一次性将事务中的所有操作执行完成后返回给客户端
    WATCH:乐观锁:在EXEC命令执行之前,用于监视指定数量的键;如果监视中的某任意键值数据被修改,则服务器拒绝执行事务;
    connection相关命令:help @connection
    AUTH password ---Authenticate to the server
    ECHO message ---Echo the given string
    PING [message] ---Ping the server
    QUIT - ---Close the connection
    SELECT index ---Change the selected database for the current connection
    Server相关命令:help @server
    CLIENT SETNAME connection-name ---Set the current connection name
    CLIENT GETNAME - ---Get the current connection name
    CLIENT KILL [ip:port] --- Kill the connection of a client
    CONFIG RESETSTAT - ---Reset the stats returned by INFO
    CONFIG REWRITE - ---Rewrite the configuration file with the in memory configuration
    CONFIG SET parameter value ---Set a configuration parameter to the given value
    INFO [section] ---Get information and statistics about the server
    DBSIZE - ---Return the number of keys in the selected database
    SAVE - ---Synchronously save the dataset to disk
    BGSAVE - ---Asynchronously save the dataset to disk
    LASTSAVE - ---Get the UNIX time stamp of the last successful save to disk
    SLAVEOF host port ---Make the server a slave of another instance, or promote it as master
    SLOWLOG subcommand [argument] ---Manages the Redis slow queries log
    发布与订阅(publish/subscribe)
    频道:消息队列
    SUBSCRIBE:订阅一个或多个队列
    PUBLISH:向频道发消息
    UNSUBSCRIBE:退订此前订阅的频道
    PSUBSCRIBE:模式订阅
    redis的持久化
    RDB和AOF
    RDB:shapshot,快照,二进制格式;周期性地将数据保存至磁盘:数据文件默认为dump.rdb;
    客户端也可显示使用SAVE或BGSAVE命令启动快照保存机制:
    SAVE:同步,在主线程中保存快照,此时会阻塞所有的客户端请求;
    BGSAVE:异步,
    配置文件中:
    默认的保存策略:
    SAVE 900 1 900秒内有1个值发生变化
    SAVE 300 10 300秒内有10个数据发生变化
    SAVE 60 10000 60秒内有10000个数据发生变化
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /var/lib/redis
    AOf:Append Only File
    记录每一次写操作至指定的文件尾部实现持久化;当redis重启时,可以通过重新执行文件中的命令在内存重建数据库;
    BGREWRITEAOF:AOF文件重写;
    不会读取正在使用AOF文件,而通过将内存中的数据已命令的方式保存到临时文件中,完成之后替换原来的AOF文件;
    重写过程:
    1>redis主进程通过fork创建子进程;
    2>子进程根据redis内存中的数据创建数据库重建命令序列于临时文件中;
    3>父进程继承Client的请求,并会把这些请求中的写操作继续追加至原来AOF文件;额外的,这些新的写请求还会被放置于一个缓冲队列中;
    4>子进程重写完成,会通知父进程:父进程把缓冲中的命令写到临时文件中;
    5>父进程用临时文件替换老的AOF文件;
    配置文件中:
    appendonly no 表示没有开启AOF
    appendfilename "appendonly.aof"
    # appendfsync always
    appendfsync everysec 每秒写一次
    # appendfsync no 系统自行决定
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    注:持久本身不能取代备份,还应指定备份策略,对redis数据库定期进行备份;
    一般RDB和AOF不能同时启用:
    RDB和AOF同时启用时:
    BGSAVE和BGREWRITEAOF不会同时执行;
    在redis服务器启动用于恢复数据时,会优先使用AOF;
    复制
    特点:
    一个master可以有多个slave;
    支持链式复制;
    master以非阻塞方式同步数据至slave;
    配置:
    在slave端:
    >SLAVEOF master_ip master_port
    注:如果master使用了requirepass开启了认证功能,从服务器要使用masterauth password来连入服务请求使用此密码进行认证;
    sentinal:
    用于管理多个redis服务器实现HA
    监控
    通知
    自动故障转移
    流言协议:投票协议
    程序:redis-sentinel
    redis-server
    过程:
    1>服务器自身初始化,运行redis-server中专用于sentinal功能的代码;
    2>初始化sentinel状态,根据给定的配置文件,初始化监控的master服务器的列表;
    3>创建连向master的连接;
    专用配置文件:/etc/redis-sentinel.conf
    # sentinel monitor <master-name> <ip> <redis-port> <quorum法定票数> 监控主节点(可以有多个)
    sentinel monitor mymaster 127.0.0.1 6379 2
    # sentinel down-after-milliseconds <master-name> <milliseconds>
    sentinel down-after-milliseconds mymaster 30000 master超时30000毫秒认为down
    # sentinel parallel-syncs <master-name> <numslaves> 允许多少个从服务器向主服务器发出同步请求
    sentinel parallel-syncs mymaster 1
    # sentinel failover-timeout <master-name> <milliseconds> 故障转移:当主节点出现故障,将从节点提升为主节点的超时时间(默认3min)
    sentinel failover-timeout mymaster 180000
    主观下线,客观下线:
    主观下线:一个sentinel实例判断出某节点下线;
    客观下线:多个sentinel节点协商后判断出某节点下线;
  • 相关阅读:
    【PENNI】2020-ICML-PENNI: Pruned Kernel Sharing for Efficient CNN Inference-论文阅读
    【BlockSwap】2020-ICLR-BlockSwap: Fisher-guided Block Substitution for Network Compression on a Budget-论文阅读
    【MCUNet】2020-NIPS-MCUNet Tiny Deep Learning on IoT Devices-论文阅读
    【FSNet】2020-ICLR-FSNet Compression of Deep Convolutional Neural Networks by Filter Summary-论文阅读
    【Shape Adaptor】2020-ECCV-Shape Adaptor: A Learnable Resizing Module-论文阅读
    【FairNAS】2019-arxiv-FairNAS Rethinking Evaluation Fairness of Weight Sharing Neural Architecture Search-论文阅读
    【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文阅读
    【DMC】2020-CVPR-Discrete Model Compression with Resource Constraint for Deep Neural Networks-论文阅读
    【RegNet】2020-CVPR-Designing Network Design Spaces-论文阅读
    【DropNet】2020-ICML-DropNet Reducing Neural Network Complexity via Iterative Pruning-论文阅读
  • 原文地址:https://www.cnblogs.com/skyzy/p/9226842.html
Copyright © 2011-2022 走看看