玩转redis

作者: 哈二聊技术 | 来源:发表于2018-10-23 00:18 被阅读0次

    很多小伙伴刚接触redis都是拿来当缓存用,然而强大的redis可不仅仅能做这点小事。

    K V数据库

    redis用的最多的就是它的kv结构了,利用set和get实现数据缓存。然而kv结构还有更高级的用法,就是setnx。这个方法在key存在返回false,然后不存在则写入返回true。通过这一特性,很容易实现锁操作。

    # 设置指定key的value
    set key value [过期时间]
    # 获取指定的key的value
    get key
    # 设置key的值并且获取key的旧value
    getset key value
    # key不存在的时候写入
    setnx key value
    # 获取多个key的value
    mget key1 [key2]...
    # 设置多个key的value
    mset key1 value1 [key2 value2]
    # 设置多个key的value(仅仅所有的key都不存在)
    msetnx key1 value1 [key2 value2]
    

    计数器

    redis提供原子增加和减少的功能,就是incr和decr。然后通过这个特性可以拿唯一id,也可以做限流器(防止过多请求)。

    # 自增1
    incr key
    # 自增指定的值
    incrby key increment
    # 自增浮点的值
    incrbyfloat key increment
    # 自减1
    decr key
    # 自减指定的值
    decrby key decrement
    

    list

    redis提供list的数据结构。可以从左右两边插入和弹出数据,并且支持阻塞读取(直到有数据才返回)。利用这些特性,我们可以基于list实现队列和栈的数据结构。

    我们来看看redis的list的应用场景:

    • 消息(任务)队列
    • 最近若干条热点数据
    # 获取列表长度
    llen key
    # 获取并移除列表第一个元素
    lpop key
    # 在列表头部插入一个或多个元素
    lpush key value [value2]
    # 获取并移除队列最后一个元素
    rpop key
    # 在队列后面添加一个或多个元素
    rpush key value [values]
    # 获取并移除列表第一个元素,如果没有值的时候会一直阻塞,直到有值或者超时
    blpop key timeout
    # 获取并移除列表最后一个元素,如果没有值的时候会一直阻塞,直到有值或者超时
    brpop key timeout
    

    set

    redis的集合支持普通的集合和有序集合。
    普通集合可以用于数据去重,并且集合的交集,并集,差集可以快速实现共同好友,二度人脉等需求。
    而有序集合可以做排行版。

    # 向集合添加一个或者多个元素
    sadd key value [value2]
    # 获取集合的成员数
    scard key
    # 获取指定集合的差集
    sdiff key [key1]
    # 获取指定集合的交集
    sinter key [key2]
    # 判断元素是否是集合的成员
    sismember key member
    # 返回集合的所有成员
    smembers key
    # 移除并返回集合随意一个元素
    spop key
    # 移除集合里面一个或者多个成员
    srem member [member2]
    # 获取指定集合并集
    sunion key [key2]
    
    # 往有序集合添加一个或者多个成员
    zadd key score1 member1 [score2 member2]
    # 获取有序集合的成员个数
    zcard key
    # 计算有序集合指定分数区间的成员数
    zcount key min max
    # 移除有序集合中一个或者多个成员
    zrem key member [member2]
    # 移除分数区间的成员
    ZREMRANGEBYLEX key min max
    # 获取指定分数区间的成员
    ZREMRANGEBYSCORE key min max
    # 获取指定分数区间的成员(分数从高到低)
    ZREVRANGE key start stop 
    # 获取指定分数区间的成员(分数从低到高)
    ZREVRANGEBYSCORE key max min
    

    hash

    redis的hash结构,类似于两层的字典。key为字典的第一层,field为字典的第二层。这种结构可以方便存储对象的属性。

    # 删除一个或者多个hash字段
    hdel key field [field2]
    # 判断hash里面field是否存在
    hexists key field
    # 获取hash里面field字段的值
    hget key field
    # 获取hash里面指定key所有field和value
    hgetall key
    # 获取hash里面指定key所有field
    hkeys key
    # 获取hash里面指定key的field数量
    hlen key
    # 获取hash指定field的值
    hmget key field [field2]
    # 设置hash里面一个field的值
    hset key field value
    # 设置hash里面多个field的值
    hmset key field value [field2 value2]
    # 设置hash里面多个field的值(当field不存在的时候)
    hsetnx key field value
    # 获取hash里面指定key所有field的值
    hvals key
    

    订阅和发布

    redis支持通过主题的订阅和发布,并且支持模式匹配订阅。但是redis的订阅发布不支持持久化存储,所以发布了信息之后,如果客户端没连接上,消息会直接丢失。
    这种功能一般用于解耦,例如一个用户注册之后,要初始化各种信息,还要推送信息。就可以把用户注册当成发布信息,各个子系统订阅该信息,然后再处理。

    # 订阅一个或多个模式频道
    PSUBSCRIBE pattern [pattern2]
    # 往一个频道发送信息
    PUBLISH channel message
    # 退订一个或者多个模式频道
    PUNSUBSCRIBE pattern [pattern2]
    # 订阅一个或多个频道
    SUBSCRIBE channel [channel2]
    # 退订一个或者多个频道
    UNSUBSCRIBE channel [channel2]
    

    事务

    redis的事务仅仅是把指令打包执行,失败了不会回滚也不会终止后面的命令。

    redis支持的数据结构

    • string
    • hash
    • list
    • set
    • 有序集合
    • 地理空间

    其它通用命令

    # 删除一个key
    del key
    # 判断key是否存在
    exists key
    # 为给定key一个过期时间(秒为单位)
    expire key second
    # 为给定key一个过期时间(unix时间戳)
    expireat key timestamp
    # 为给定key一个过期时间(毫秒为单位)
    pexpire key milliseconds
    # 为给定key一个过期时间(unix时间戳,毫秒)
    pexpireat key timestamp
    # 查找符合规则的key
    keys pattern
    # 返回key剩余过期时间,毫秒
    pttl key
    # 返回key剩余过期时间,秒
    ttl key
    # 获取key的类型
    type key
    

    相关文章

      网友评论

        本文标题:玩转redis

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