美文网首页
Redis使用心得记录

Redis使用心得记录

作者: 指间砂的宿命 | 来源:发表于2018-09-13 11:00 被阅读9次

    0.通用命令

    del key  # 删除key
    exists key  # check某个key是否存在
    expire key  # 为某个key设置过期时间
    flushall  # 清空redis中所有数据
    

    1.string操作命令

    set key value  # 设置key,value;如果key已存在,则value会被覆盖
    getset key value # 设置key,value: 1.如果当前key已存在,则返回被覆盖前的value 2.当前key不存在,则设置key,value并返回null
    setex key seconds value  # 设置key、value,有效期seconds秒;对于已经存在的key也可以执行该操作重置value并赋予expired time
    incr key # key对应的value自增,如果key对应value不是整数返回错误,如果key不存在,将value设置为 1
    decr key # key对应的value自减,如果key对应value不是整数返回错误, 可以是负数
    setnx key value  # 设置key、value,如果key存在则setnx失败,返回 0 (set key value nx等价)
    mset key value key value # 批量设置key、value,jedis客户端需要以数组形式传递key,value...
    mget key key # 批量获取key的值, jedis客户端返回value1,value2...数组
    

    注redis中字符数据类型:

    int:8 个字节的长整型
    embstr:小于等于 39 个字节的字符串
    raw:大于 39 个字节的字符串
    

    2.hash操作命令

    hset key field value  # 设置key对应map中的一对field value
    hget key field  # 获取key对应field的value值
    hdel key field   # 当key对应的hashmap中fiedl为空时,这个key会被移除
    hlen key  # 计算key中field个数,不存在的key,返回0
    hkeys key  # 返回key中包含的所有field
    hvals key  # 返回key中map的所有value
    hexists key field  # 判断key是否存在field属性
    

    3.list操作命令

    rpush key [value...]  # 从右边顺序插入
    lpush key [value...]  # 从左边顺序插入
    lrange key start end  # 从左到右查询list中下标从start到end的元素(包括end),索引下标从左到右是0到N,从右到左是-1到-N,lrange key 0 -1 表示查询所有元素, 并不会从list中删除查询出来的元素
    lindex key index  # 获取指定下标的元素
    lset key index newValue  # 修改list中指定下标的元素
    llen key  # 获取list的长度
    lpop key  # 从list左边弹出元素,弹出元素从list中移除
    rpop key  # 从list右边弹出元素,弹出元素从list中移除
    lrem key count value  #  count<0 从右到左,删除最多count绝对值个等于value的元素;count = 0 删除所有等于value的元素;count>0 从左到右,删除最多count个等于value的元素
    blpop [key...] timeout  # 阻塞式的从左边弹出给定key(可以是多个)中的元素
    brpop [key...] timeout  # 阻塞式的从右边弹出给定key(可以是多个)中的元素
    
    • 关于blpop的使用说明:
      key可以是不存在的; timeout表示阻塞时间,单位是秒(s); 如果阻塞期间取到元素(可以是多个key中任意某个pop元素),直接返回元素而不会再继续遍历;如果所有list都取不到元素,则阻塞,等到timeout时间之后会释放; timeout = 0表示如果取不到元素,一直阻塞下去。 如果多个客户端对同一个key执行blpop操作,那么最先执行blpop命令的客户端可以先取到元素。
    • 使用场景:
      • 消息队列:使用lpush和brpop命令组合可以实现阻塞队列
      • 队列:lpush + rpop
      • 栈:lpush + lpop

    4.Set操作命令

    sadd key [element …]  # 添加元素
    srem ket [element …]  #移除元素
    scard key  # 计算元素个数,时间复杂度O(1),不会遍历集合所有元素,直接使用Redis内部变量
    sismember key element  # 判断元素是否在Set中
    srandmember key [count]  # 从Set中随机返回count个元素,不指定count默认返回一个元素,不会移除元素
    spop key  # 从Set中随机弹出一个元素,移除弹出的元素
    smembers key  # 获取所有元素
    sinter [key …]  # 求多个Set的交集
    sunion [key …]  # 求多个Set的并集
    sdiff [key …]  # 求多个Set的差集,key1和key2的差集结果和key3再取差集以此类推
    sinterstore destination [key …]  # 将多个Set的交集保存到destination上
    sunionstore destination [key …]  # 将多个Set的并集保存到destination上
    sdiffstore destination [key …]  # 将多个Set的差集保存到destination上
    
    • 使用场景:
      Set类型提供了集合的交并差集运算,比较适合的场景是标签(tag)。
      例如给用户添加标签就可以通过交集查出用户的共同标签;
      给标签添加用户就可以通过交集查出有共同标签的用户。

    5.Redis使用注意

    • 1.Redis默认最大连接数10000,但是受限于linux系统的最大连接数,linux可以使用ulimit -a查看open files大小,具体修改linux最大连接数命令:
    $ vim /etc/security/limits.conf  # 新增如下字段
    *       soft    nofile  65535
    *       hard    nofile  65535
    *       soft    nproc   65535
    *       hard    nproc   65535
    $ vim /etc/pam.d/login # 新增如下字段
    session    required     pam_limits.so
    # 重启服务器
    
    • 2.慎用keys和flushall命令,这种命令在大数据量时执行很慢会导致雪崩效应
    • 3.monitor命令会占用大量cpu,具体线程cpu使用量使用命令```top -Hp pid``查看

    相关文章

      网友评论

          本文标题:Redis使用心得记录

          本文链接:https://www.haomeiwen.com/subject/guqwgftx.html