• redis cook book.notes.


    1.string
    set get
    set name ximing
    get 不存在的时候,会返回nil
    strlen 测试目标长度;对不存在的返回0
    append 给目录字串添加
    setrange 替换,从offset开始,替换成**,其它不变;
    setRange name 1 hello    //从第2位开始,用hello替换,其它不变;会返回新串长度
    setnx:   not exists 不存在时设置,存在则什么都不操作;返回1说明不存在,0说明什么都没操作
    Mset mGet 可以操作多个值,注意,这个m代表multi;
    总结:增:set/mset 删:del 改:set 查:get/mget 替:setRange
    ---------------------------------------------------------------------
    2.list
    像双向链表,从右到左的索引为-1,到 -N;
    Lpush name "v1" "v2"      返回数组长度
    Rpush 右插;
    lrange name 0 -1    获取 0,-1注意L是倒序 R是正序
    Lindex name 1 //按索引获取目标
    LINSERT key BEFORE|AFTER pivot value     //插入,在前,在后?
    LINSERT list BEFORE v3 v4     //v3 是原有的值,在v3前插入,一定要有在哪里,否则不识别命令;
    LpushX  加了X,代表exists,只有列表存在时,我才加;不存在,则0操作;也有RpushX
    Lpop,Rpop 弹出其值;会删值,并返回其值;没有值,则nil
    Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。Ltrim list -1 -1 //留后1
    lset list 0 vvv    对list列表索引为0的更新操作,改成"vvv"
    总结: 增 Lpush/rPush,LInsert 删 Ltrim 改Lset 查 Lrange
    -----------------------------------------------------------
    Lpop,rPOP有阻塞版本,BLpop,BRpop但当列表为空时,弹不出数据时,阻塞版本就会阻塞客户端,须指定阻塞秒数,0代表一直;这个特性可以作队列;  如: BRpop job_queue 0 //
    ----------------------------------------------------------------------
    3.hash
    hset torrent id 1
    HmSet torrent      id 1 age 2 tag 3 //设置torrent 的id,age,tag;
    HmGet torrent id //得到id,如果要多个,加 Hmget torrent id age
    HExists torrent id //torrent 的id字段是否存在;
    HGetAll  name //得到所有的,返回字段与值;
    hDel torrent id phone //删2个字段
    总结:增:hset,hMset,删:hdel 改:删字段再增;查hget,hgetall:
    ---------------------------------------------------------------------
    4.set
    注意,他的key与 value一致,所有,只有一个name,其它的所有的都是value,当然,也可以说是key;
    sadd name "xiaoming" "maogdou"
    sIsmember  ts "good"   good 是否在其中;
    srem ts good //从集合中移除good;
    SMEMBERS ts   //查看集合中所有内容
    scard 获取集合成员数;
    spop : 随机弹出一个元素;返回元素,原集合中删除
    srandmember  返回一个随机元素
    smove ts ts1 "good" //将ts中的good移到ts1中;
    集合操作:SDIFF key1 [key2] 差集 SINTERSTORE destination key1 [key2] 交集 SUNION key1 [key2] 并集
    总结: 增sadd 删srem 改:srem,sadd查:smembers
    ---------------------------------------------------------------------
    5.sorted set 有序集合,他是一个score 积分当key,带一个value;分在前,值在后;
    zadd ts 1 good 2 better 3 best
    zrevrange ts 0 -1 withscores  查看所有的;
    ZSCORE key member  查分值,这个是原始的;
    zrank ts best  返回成员的索引
    zrevrank ts better 排名,最大的为0
    ZincrBy ts good 给ts的good增1;
    zunionstore 合并二个集合;
    zadd ts nx 500 good //不更新己存在的成员,如果是新成员,则增;
    ---------------------------------------------------------------------
    6.HyperLogLog  用于计数器
    pfadd count 1
    pfcount count  //得到1
    ---------------------------------------------------------------------
    7.Geo geoadd rslocation ca 122.11 1111.121  // 一个键跟了一个xy;
    -----------------------------
    SCAN: SCAN,HSCAN,SSCAN,ZSCAN 一种基于指针的迭代器;增量的迭代遍历元素,从而不会造成服务器阻塞;
    HScan torrent 0 match *title*  //扫描key带title的字段,从光标0开始;注意是key,不是value;  注意第一个值为游标位置,这个可以用于下一次遍历;可以把上面的0换成下一次游标的位置;

    @========================================
    sbsize 查看数据库大小 keys *
    scan 0  //查看所有的键,后面跟光标
    exists "key"  //查看键是否存在
    rename 1 2 //重命名

    位图: setbit user 100 1   getbit user 100  
    bitcount 查看多少位用户使用过这个功能

    过期时间: expire name 60 //1min
    查看:   ttl name //查看过期时间
    persist name 不限时
    EXPIREAT name 1293840000  //+at  后面跟时间戳

    排序: sort tag alpha // 按字母顺序排序
    sort ... alpha limit 0 3
    sort  ... by restaurant_rating_* desc get restaurant_name_*

    管道:
    从文件读命令进redis:
    cat pipline.txt | bin/redis-cli --pip  //把pipline.txt的命令pip进redis;

    事务:
    multi 开始事务
    各种命令
    exec    开始执行

    订阅者 发布者
    publish tag 1
    subscribe tag
    pubsub channels   列出正在订阅发布的频道列表

    info命令,查看系统信息
    复制:
    port 6380
    dir ./slave
    slaveof localhost 6379
    配置文件改一下;端口,目录,还有从属设置;然后通过 -p 指定端口连接即可;
    持久化:改配置文件的 save 900 save 300 这些 save 开头的,注释掉即可;
    或者: redis-cli config set save "" //不持久化
    获取save值: redis-cli config get save
    保存在目录的dump.rdb;    要保存 save 命令即可  bgsave  后台存盘

    flushall 清空数据

    sentinel :  引出: 如果主服务器死机了,需要一种可能自动切换让从服务器顶上去;这时就需要sentinel;
    配置文件:

    port 26379
    sentinel monitor mymaster 127.0.0.1 6379 2     //ip,端口 投票数;2票才能变主机
    sentinel down-after-milliseconds mymaster 30000  //30秒未响应ping命令,视为下线;
    sentinel parallel-syncs mymaster 1   //同时从新的主实例进行数据同步;
    sentinel failover-timeout mymaster 180000 //

    加载:redis-server sentinel.conf --sentinel
    运行后,出现Running in sentinel mode   port 26379 pid   
    [19708] 21 Jul 10:37:38.989 # Sentinel runid is d8272b1b567870343c9732d180d8d9ff6356f4b2
    [19708] 21 Jul 10:37:38.990 # +monitor master mymaster 127.0.0.1 6379 quorum 2
    sentinel auth-pass mymaster 123456 如果master配置了密码,则此项必须配置,否则sentinel会将master标记问主观下线(sdown)。

    集群:
    cluster-enabled yes
    cluster-config-file nodes-6379.conf  //redis实例启动后,会在data目录下生成节点配置文件;
    cluster-node-timeout 10000

    启动集群时,打开二个端口,一个给客户,一个用作实例间信息交换的通讯总线,第二个是第一个+10000,因此,端口不能大于55536;
    redis-cli -h 192.168.1.56 -p 6379 CLuster meet 192.168.1.56 6379    //自己先遇到自己,然后57.58.59...都是一样的命令;
    命令: cluster nodes

  • 相关阅读:
    Java 设计模式之工厂模式与单例模式
    #QT(串口助手-实现)
    SE语法总结博文(附思维导图)
    一篇超级最全的python基础篇(新手必看!)
    半导体行业常用电子级PFA试剂瓶的规格分类及特性
    数据库系统原理【练习题】——第一章:概述
    谈谈ORACLE应用数据同步器:Primavera Gateway
    Java大厂面试题第2季
    学会 arthas,让你 3 年经验掌握 5 年功力!
    2.1.6 面向对象:一切皆对象(Python)
  • 原文地址:https://blog.csdn.net/catwan/article/details/125911216