zoukankan      html  css  js  c++  java
  • Redis数据类型和常用命令

    Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事。一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化。

    数据类型和对应命令

    所有存储于redis中的数据都对应于一个键值对(key-value pair), key可以是任意二进制序列,通常我们使用字符串来标记一个特定的key。在redis中我们通常称这个key为name或者就叫key, 而对于value,redis支持如下几种类型:

    • strings
    • lists: list内容只能是string
    • sets: set中存储非重复的string
    • sorted sets: 与sets类似,但是每个string都会对应一个float类型的score,从而用于排序
    • hashes: 键值对hash类型,也就是Python中的dict,注意在redis中最外层的key一般叫做name或者key,而value中数据类型如果是dict,那么这个dict中的key通常被称为field。
    • Bit arrays (or simply bitmaps): 实际存储的仍然是string,但是可以针对bit进行操作
    • HyperLogLogs: 用于估计unique value的数量

    针对不同的数据类型,会有不同的命令,通过如下脑图可以更加清晰地记忆redis的命令


     
    Redis数据类型与常用命令

    strings

    127.0.0.1:6379> set strtest xyz
    OK
    127.0.0.1:6379> get strtest
    "xyz"
    127.0.0.1:6379> mset a 1 b 2 c 3
    OK
    127.0.0.1:6379> mget a b c
    1) "1"
    2) "2"
    3) "3"
    # 注意以下增减操作只能针对整数数字(虽然类型仍然是string类型)
    127.0.0.1:6379> incr a
    (integer) 2
    127.0.0.1:6379> incrby b 5
    (integer) 7
    127.0.0.1:6379> decr b
    (integer) 6
    127.0.0.1:6379> decrby b 3
    (integer) 3
    

    lists

    lists类型中存储的仍然是string类型

    # left push用于从左将item压入到list当中
    127.0.0.1:6379> lpush list_test 1 2 3
    (integer) 3
    
    # 注意如果想看list中的内容,无法通过get直接去看,get只是针对string,而必须使用lrange
    127.0.0.1:6379> get list_test 
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    
    # 这里0 -1均为list index,表示从index 0 开始到-1结束,-1即从右数最后一个item
    127.0.0.1:6379> lrange list_test 0 -1
    1) "3"
    2) "2"
    3) "1"
    
    127.0.0.1:6379> rpush list_test 5 7
    (integer) 5
    127.0.0.1:6379> lrange list_test 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "5"
    5) "7"
    127.0.0.1:6379> lpop list_test
    "3"
    127.0.0.1:6379> lrange list_test 0 -1
    1) "2"
    2) "1"
    3) "5"
    4) "7"
    
    # 从左trim截断list,以下是截取index 0 到index 2 的item作为新的list
    127.0.0.1:6379> ltrim list_test 0 2
    OK
    127.0.0.1:6379> lrange list_test 0 -1
    1) "2"
    2) "1"
    3) "5"
    

    hashes (dict)

    哈希类型,在python中也就是dict类型。这也是非常常用的数据类型。

    127.0.0.1:6379> hset htest a 1
    (integer) 1
    127.0.0.1:6379> hget htest a
    "1"
    127.0.0.1:6379> hmset htest a 1 b 2 c 3
    OK
    127.0.0.1:6379> hmget htest a b c
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> hgetall htest
    1) "a"
    2) "1"
    3) "b"
    4) "2"
    5) "c"
    6) "3"
    127.0.0.1:6379> hkeys htest
    1) "a"
    2) "b"
    3) "c"
    127.0.0.1:6379> hvals htest
    1) "1"
    2) "2"
    3) "3"
    

    在python程序中使用redis-py driver的时候,通过dict进行操作会非常清晰和简单。

    In [1]: import redis
    
    In [2]: r = redis.StrictRedis(host='localhost', port=6379, db=0)
    
    In [3]: d = {"a": 2, "b": 3}
    
    In [4]: key = "test:2"
    
    In [5]: r.hmset(key, d)
    Out[5]: True
    
    In [6]: r.hgetall(key)
    Out[6]: {'a': '2', 'b': '3'}
    

    sets

    127.0.0.1:6379> sadd set_test a b 33
    (integer) 3
    127.0.0.1:6379> sadd set_test c a b 22
    (integer) 1
    
    # 可以看到不会有重复的item
    127.0.0.1:6379> smembers set_test
    1) "c"
    2) "33"
    3) "a"
    4) "b"
    
    # 用于测试set中是否包含指定的item,如有则返回1,没有返回0
    127.0.0.1:6379> sismember set_test a
    (integer) 1
    127.0.0.1:6379> sismember set_test xx
    (integer) 0
    
    127.0.0.1:6379> sadd set_test2 a b 56 66
    (integer) 4
    127.0.0.1:6379> smembers set_test2
    1) "56"
    2) "a"
    3) "66"
    4) "b"
    
    # 求交集
    127.0.0.1:6379> sinter set_test set_test2
    1) "a"
    2) "b"
    
    # 求并集
    127.0.0.1:6379> sunion set_test set_test2
    1) "33"
    2) "a"
    3) "56"
    4) "c"
    5) "66"
    6) "22"
    7) "b"
    

    sorted sets

    sorted sets与sets类似,可以保证item不重复,区别在于sorted sets中每个item对应一个float类型的score

    127.0.0.1:6379> zadd sort_set 2.2 a
    (integer) 1
    127.0.0.1:6379> zadd sort_set 2 bb
    (integer) 1
    127.0.0.1:6379> zadd sort_set 10 x
    (integer) 1
    
    # 获取index 从0 到-1的(即所有) items
    127.0.0.1:6379> zrange sort_set 0 -1
    1) "bb"
    2) "a"
    3) "x"
    
    # 获取item bb对应的index
    127.0.0.1:6379> zrank sort_set bb
    (integer) 0
    127.0.0.1:6379> zrank sort_set x
    (integer) 2
    127.0.0.1:6379> zscore sort_set x
    "10"
    
    # 用于获取对应score set中item的数量
    127.0.0.1:6379> zcard sort_set
    (integer) 3
    

    bit arrays

    用于针对指定的key设置位数据为0 或 1。当我们对存储有较高要求,且对于统计为1的item的数量时,使用bit array是一个好的办法。

    # 针对bit 7进行设置,设置为1,返回该位之前存储的值
    127.0.0.1:6379> setbit bit_test 7 1
    (integer) 0
    127.0.0.1:6379> setbit bit_test 7 0
    (integer) 1
    127.0.0.1:6379> get bit_test
    "x00"
    127.0.0.1:6379> setbit bit_test 8 1
    (integer) 0
    127.0.0.1:6379> setbit bit_test 9 1
    (integer) 0
    
    # 统计有多少位为1
    127.0.0.1:6379> bitcount bit_test
    (integer) 2
    

    HyperLogLogs

    redis实现了相应算法可以估计hyperloglog中存储的所有item中非重复的item的数量

    127.0.0.1:6379> pfadd loglog 1 3 5 7 1
    (integer) 1
    127.0.0.1:6379> pfcount loglog
    (integer) 4
    

    通用的命令

    • keys pattern: pattern可以为glob风格的通配符格式,最常用的是keys *查询所有的keys
    • exists key: 查询该key是否存在
    • del key: 删除该key对应的数据
    • type key: 查询该key对应的value的数据类型
    • expire key: 定义多长时间后key对应的数据过期,过期后数据会被自动删除
    • ttl key: 查询该key对应的剩余存活时间
    • flushdb/flushall: flushdb用于清除当前db的所有数据,flushall清除所有数据库的数据

    References



    作者:geekpy
    链接:https://www.jianshu.com/p/cd434a19c822
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    树莓派Raspberry命令行配置无线网络连接
    Gradient Descent
    下载知乎指定问题的答案并保存图片
    获取JQuery UI tabs中被选中的tabs的方法
    VM603:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
    PHPstorm配置远程及本地服务器
    ubuntu系统搭建samba服务
    centos6.4升级openssh7.4p1
    nginx服务学习第二章
    centos7.2升级openssh7.9p1
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/9541857.html
Copyright © 2011-2022 走看看