美文网首页
Redis那些事-数据类型与常用命令

Redis那些事-数据类型与常用命令

作者: Dane_404 | 来源:发表于2019-11-14 15:00 被阅读0次

    数据类型

    STRING (字符串)
    可以是保存字符串、整数和浮点数。
    可以对字符串进行操作,比如增加字符或在求子串;如果是整数或者浮点数,可以实现计算,比如自增等。

    LIST (列表)
    它是一个链表,它的每一个节点都包含一个字符串。
    Redis 支持从链农的两端插入或者弹出节点,或在通过偏移对它进行裁剪;还可以读取一个或者多个节点, 根据条件删除或者查找节点等。

    SET (集合)
    它是一个收集器,但是是无序的,在它里面每一个元素都是一个字符串,而且是独一无二,各不相同的。
    可以新增、读取、删除单个元素 ; 检测 一个元索是否在集合中,计算它和其他集合的交集、并集和差集等; 随机从集合巾读取元素。

    HASH (哈希散列表)
    它类似于Java语言中的Map,是一个键值对应的无序列表。
    可以增、删 、 查、改单个键值对,也可以获取所有的键值对。

    ZSET (有序集合)
    它是一个有序的集合,可以包含字符串、整数、浮点数、分值(score), 元素的排序是依据分值的大小来决定的。
    可以增、删、查、改元素,根据分值的范围或者成员来获取对应的元素。

    HyperLogLog (基数)
    它的作用是计算重复的值,以确定存储的数量。
    只提供基数的运算,不提供返回的功能。

    比如数字集合{ l,2,5,7,9,1,5,9}的基数集合为{ 1,2,5,7,9}那么基数 (不重复元素)就是 5,基数的作用是评估大约需要准备多少个存储单元去存储数据,但是基数的算法一般会存在一定的误差(一般是可控的)。

    Redis常见命令

    key命令

    key命令用于管理Redis的键,有11种,分别是del exists expire pexpire keys move persist pttl ttl randomkey rename type。

    del、exists、rename、type
    del删除key,exists判断是否存在key,rename就是盖key名,type查询key的数据类型。

    127.0.0.1:6379> exists key1
    (integer) 1
    127.0.0.1:6379> del key1
    (integer) 1
    127.0.0.1:6379> exists ke2 user_2
    (integer) 1
    127.0.0.1:6379> del key2 user_2
    (integer) 2
    
    127.0.0.1:6379> rename user user1
    OK
    127.0.0.1:6379> get user
    (nil)
    127.0.0.1:6379> get user1
    "dane"
    127.0.0.1:6379> 
    
    127.0.0.1:6379> type user1
    string
    127.0.0.1:6379> 
    

    expire、pexpire、ttl、pttl、persist
    expire、pexpire表示设置key的过期时间,expire单位是秒,pexpire单位是毫秒;ttl、pttl表示查询key还剩下多少时间过期,ttl对应expire,pttl对应pexpire;persist表示持久化key,设置的过期时间失效变成不过期。

    127.0.0.1:6379> set user dane
    OK
    127.0.0.1:6379> expire user 20
    (integer) 1
    127.0.0.1:6379> ttl user
    (integer) 17
    127.0.0.1:6379> get user
    (nil)
    
    127.0.0.1:6379> set user dane
    OK
    127.0.0.1:6379> pexpire user 20000
    (integer) 1
    127.0.0.1:6379> pttl user
    (integer) 15751
    127.0.0.1:6379> get user
    (nil)
    
    127.0.0.1:6379> set user dane
    OK
    127.0.0.1:6379> expire user 60
    (integer) 1
    127.0.0.1:6379> persist user
    (integer) 1
    127.0.0.1:6379> get user
    "dane"
    

    keys
    用查找Redis所有的key。

    127.0.0.1:6379> keys *
    1) "lua-key"
    2) "user1"
    3) "user_1"
    4) "[lua-key]"
    127.0.0.1:6379> keys us*
    1) "user1"
    2) "user_1"
    127.0.0.1:6379> 
    

    move
    Redis也存在多个数据库,move用于移动key到指定数据库。

    127.0.0.1:6379> select 0
    OK
    127.0.0.1:6379> keys *
    1) "lua-key"
    2) "user1"
    3) "user_1"
    4) "[lua-key]"
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    (empty list or set)
    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> move user1 1
    (integer) 1
    127.0.0.1:6379> keys *
    1) "lua-key"
    2) "user_1"
    3) "[lua-key]"
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    1) "user1"
    127.0.0.1:6379[1]> 
    

    string命令

    用于操作string的命令,常见的有set mset get mget getrange getset setex setrange strlen psetex incr incrby incrbyfloat decr decrby append。

    set mset get mget
    表示添加和获取,m开头表示可以一次添加或取出多个。

    127.0.0.1:6379> set user1 dane
    OK
    127.0.0.1:6379> mset user2 dane2 user3 dane3
    OK
    127.0.0.1:6379> keys u*
    1) "user3"
    2) "user1"
    3) "user_1"
    4) "user2"
    127.0.0.1:6379> get user1
    "dane"
    127.0.0.1:6379> mget user2 user3
    1) "dane2"
    2) "dane3"
    127.0.0.1:6379> 
    

    setrange getrange strlen
    setrange表示范围修改值,getrange表示范围获取值,strlen表示获取string的长度

    127.0.0.1:6379> set user dane
    OK
    127.0.0.1:6379> setrange user 4 1
    (integer) 5
    127.0.0.1:6379> get user
    "dane1"
    127.0.0.1:6379> setrange user 3 1
    (integer) 5
    127.0.0.1:6379> get user
    "dan11"
    127.0.0.1:6379> getrange user 1 4
    "an11"
    127.0.0.1:6379> strlen user
    (integer) 5
    

    getset
    表示先获取先前的值,在改变它。

    127.0.0.1:6379> getset user dane
    "dan11"
    127.0.0.1:6379> get user
    "dane"
    127.0.0.1:6379> 
    

    setex psetex
    指定的 key 设置值及其过期时间,setex单位是秒,psetex单位是毫秒。

    127.0.0.1:6379> setex user 1 dane
    OK
    127.0.0.1:6379> get user
    (nil)
    127.0.0.1:6379> psetex user 1000 dane
    OK
    127.0.0.1:6379> get user
    (nil)
    127.0.0.1:6379> 
    

    incr incrby incrbyfloat
    incr表示将 key 中储存的数字值+1,incrby表示加指定的值,incrbyfloat加指定的浮点型。

    127.0.0.1:6379> set num 1
    OK
    127.0.0.1:6379> incr num
    (integer) 2
    127.0.0.1:6379> get num
    "2"
    127.0.0.1:6379> incrby num 2
    (integer) 4
    127.0.0.1:6379> get num
    "4"
    127.0.0.1:6379> incrbyfloat num 2.2
    "6.2"
    127.0.0.1:6379> get num
    "6.2"
    

    decr decrby
    decr表示将 key 中储存的数字值-1,decrby表示加指定的值,注意只能是整数。

    127.0.0.1:6379> set num 1
    OK
    127.0.0.1:6379> decr num
    (integer) 0
    127.0.0.1:6379> decr num 2
    (error) ERR wrong number of arguments for 'decr' command
    127.0.0.1:6379> get num
    "0"
    127.0.0.1:6379> decrby num 2
    (integer) -2
    127.0.0.1:6379> get num
    "-2"
    

    append
    拼接字符串

    127.0.0.1:6379> set user dane
    OK
    127.0.0.1:6379> append user 11
    (integer) 6
    127.0.0.1:6379> get user
    "dane11"
    

    hash 命令

    操作hash的命令,常见命令:hdel hexists hget hset hmget hmset hkeys hvals hlen hgetall hincrby hincrbyfloat。

    hset hget hmset hmget

    127.0.0.1:6379> hset huser name dane
    (integer) 1
    127.0.0.1:6379> hget huser name
    "dane"
    127.0.0.1:6379> hmset huser age 18 sex 1
    OK
    127.0.0.1:6379> hmget huser age sex
    1) "18"
    2) "1"
    127.0.0.1:6379> 
    

    hdel hexists

    127.0.0.1:6379> hexists huser sex
    (integer) 1
    127.0.0.1:6379> hdel huser sex
    (integer) 1
    127.0.0.1:6379> hget huser sex
    (nil)
    

    hkeys hvals hlen hgetall
    分别表示获取所以键、获取所有值、获取hash长度、获取所有键值

    127.0.0.1:6379> hkeys huser
    1) "name"
    2) "age"
    127.0.0.1:6379> hvals huser
    1) "dane"
    2) "18"
    127.0.0.1:6379> hlen huser
    (integer) 2
    127.0.0.1:6379> hgetall huser
    1) "name"
    2) "dane"
    3) "age"
    4) "18"
    

    hincrby hincrbyfloat

    127.0.0.1:6379> hincrby huser age 2
    (integer) 20
    127.0.0.1:6379> hget huser age
    "20"
    127.0.0.1:6379> hincrbyfloat huser age 2.2
    "22.2"
    127.0.0.1:6379> hget huser age
    "22.2"
    

    list命令

    操作list的命令,常见命令:lindex llen linsert lpop lpush lpushx lrange lrem lset ltrim rpop rpush rpushx。

    lpush lpushx rpush rpushx lindex
    把list当做一根管子,lpushx表示往左边加一个,lpush表示往左边加多个, rpushx表示往右边加一个,rpush表示往右边加多个,注意的是,lpushx和 rpushx前提是该key存在,lindex表示list对应下标的值。

    127.0.0.1:6379> lpush tests test1
    (integer) 1
    127.0.0.1:6379> del tests
    (integer) 1
    127.0.0.1:6379> lpush tests test1 test2
    (integer) 2
    127.0.0.1:6379> lindex tests 0
    "test2"
    127.0.0.1:6379> lpush tests test3
    (integer) 3
    127.0.0.1:6379> lindex tests 0
    "test3"
    127.0.0.1:6379> rpush tests test4 test5
    (integer) 5
    127.0.0.1:6379> lindex tests 4
    "test5"
    127.0.0.1:6379> rpushx tests test6
    (integer) 6
    127.0.0.1:6379> lindex tests 5
    "test6"
    

    llen lpop rpop
    llen表示查询list长度,lpop表示从左边拿出一个,rpop则是从右边。

    127.0.0.1:6379> llen tests
    (integer) 6
    127.0.0.1:6379> lpop tests
    "test3"
    127.0.0.1:6379> llen tests
    (integer) 5
    127.0.0.1:6379> rpop tests
    "test6"
    127.0.0.1:6379> llen tests
    (integer) 4
    

    linsert lset
    linsert命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。

    127.0.0.1:6379> lindex tests 1
    "test1"
    127.0.0.1:6379> linsert tests before test1 test8
    (integer) 5
    127.0.0.1:6379> lindex tests 1
    "test8"
    127.0.0.1:6379> lset tests 1 test9
    OK
    127.0.0.1:6379> lindex tests 1
    "test9"
    

    ltrim lrange
    ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。lrange表示查询指定区间。

    下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    127.0.0.1:6379> llen tests
    (integer) 5
    127.0.0.1:6379> ltrim tests 2 4
    OK
    127.0.0.1:6379> llen tests
    (integer) 3
    127.0.0.1:6379> lrange tests 0 -1
    1) "test1"
    2) "test4"
    3) "test5"
    

    lrem
    根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

    • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
    • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
    • count = 0 : 移除表中所有与 VALUE 相等的值。
    127.0.0.1:6379> lrem tests 0 test1
    (integer) 1
    127.0.0.1:6379>  lrange tests 0 -1
    1) "test4"
    2) "test5"
    

    set命令

    操作set的命令,常见命令:sadd scard sdiff sdiffstore sinter sinterstore sunion sunionstore sismember smembers smove spop srem srandmember sscan

    sadd scard smembers sismember srem
    scard表示查询set数量;
    smembers表示set查询出所有元素;
    sismember判断成员元素是否是集合的成员;
    srem删除指定的元素

    127.0.0.1:6379> sadd tests test1 test2
    (integer) 2
    127.0.0.1:6379> scard tests
    (integer) 2
    127.0.0.1:6379> smembers tests
    1) "test1"
    2) "test2"
    127.0.0.1:6379> sismember tests test1
    (integer) 1
    127.0.0.1:6379> smembers tests
    1) "test1"
    2) "test2"
    127.0.0.1:6379> srem tests test1
    (integer) 1
    127.0.0.1:6379> smembers tests
    1) "test2"
    

    sdiff sdiffstore sinter sinterstore sunion sunionstore
    sdiff表示两个集合的差集,顺序不一样结果也不一样;
    sdiffstore 命令将给定集合之间的差集存储在指定的集合中;
    sinter表示两个集合的合集;
    sinterstore表示两个集合的合集存储在指定的集合中;
    sunion 表示给定集合的并集;
    sunionstore 表示给定集合的并集存储在指定的集合中;

    127.0.0.1:6379> sadd set1 1 2
    (integer) 2
    127.0.0.1:6379> sadd set2 2 4
    (integer) 2
    127.0.0.1:6379> sdiff set1 set2
    1) "1"
    127.0.0.1:6379> scard set1
    (integer) 2
    127.0.0.1:6379> scard set2
    (integer) 2
    127.0.0.1:6379> sdiff set2 set1
    1) "4"
    127.0.0.1:6379> sdiffstore set3 set1 set2
    (integer) 1
    127.0.0.1:6379> smembers set3
    1) "1"
    127.0.0.1:6379> sinter set1 set2
    1) "2"
    127.0.0.1:6379> sinterstore set4 set1 set2
    (integer) 1
    127.0.0.1:6379> smembers set4
    1) "2"
    127.0.0.1:6379> sunionstore set5 set1 set2
    (integer) 3
    127.0.0.1:6379> smembers set5
    1) "1"
    2) "2"
    3) "4"
    

    smove
    移动一个集合的元素到另一个集合

    127.0.0.1:6379> smove set1 set2 1
    (integer) 1
    127.0.0.1:6379> smembers set1
    1) "2"
    127.0.0.1:6379> smembers set2
    1) "1"
    2) "2"
    3) "4"
    

    spop srandmember
    spop表示随机删除一个或多个元素,指定数量则多个,返回被删除的元素。
    srandmember表示随机获取一个或多个元素,指定数量则多个。

    127.0.0.1:6379> sadd set 1 2 3 4
    (integer) 4
    127.0.0.1:6379> spop set
    "4"
    127.0.0.1:6379> smembers set
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> spop set 2
    1) "1"
    2) "3"
    127.0.0.1:6379> smembers set
    1) "2"
    127.0.0.1:6379> sadd set 1 3 4
    (integer) 3
    127.0.0.1:6379> srandmember set
    "4"
    127.0.0.1:6379> srandmember set 2
    1) "3"
    2) "4"
    

    sscan
    用于迭代集合中的元素。

    127.0.0.1:6379> sscan set 0
    1) "0"
    2) 1) "1"
       2) "4"
    127.0.0.1:6379> sscan set 0 match 4
    1) "0"
    2) 1) "4"
    

    zset命令

    常见命令:zadd zcard zcount zincrby zinterstore zrange zrangebyscore zrank zrem zremrangebyrank zremrangebyscore zrevrange zrevrangebyscore zrevrank zscore zunionstore zscan

    zadd zcard zcount
    zadd语法为ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN,SCORE表示分数值,zset基于这个做排列。
    zcard表示zset数量。
    zcount表示计算有序集合中指定分数区间的成员数量。

    127.0.0.1:6379> zadd zset 1 set1
    (integer) 1
    127.0.0.1:6379> zadd zset 1 set2
    (integer) 1
    127.0.0.1:6379> zadd zset 2 set3 3 set4
    (integer) 2
    127.0.0.1:6379> zrange zset 0 01
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> zrange zset 0 -1
    1) "set1"
    2) "set2"
    3) "set3"
    4) "set4"
    127.0.0.1:6379> zcount zset 1 3
    (integer) 4
    

    zincrby
    语法ZINCRBY key increment member,表示对指定成员的分数加上增量 increment,如果member不存在,则相当于ZADD key increment member。

    127.0.0.1:6379> zadd zset 1 m1 2 m2 
    (integer) 2
    127.0.0.1:6379> zrange zset 0 -1
    1) "m1"
    2) "m2"
    127.0.0.1:6379> zincrby zset 2 m1
    "3"
    127.0.0.1:6379> zrange zset 0 -1
    1) "m2"
    2) "m1"
    

    zrange zrangebyscore zrank zscore
    zrange和lrange一样;
    zrangebyscore是用score来指定范围,
    zrank返回成员的排名。
    zscore返回成员的分数。

    127.0.0.1:6379> zrange zset 0 -1
    1) "m2"
    2) "m1"
    127.0.0.1:6379> zrangebyscore zset 1 2
    1) "m2"
    127.0.0.1:6379> zrank zset m2
    (integer) 0
    127.0.0.1:6379> zscore zset m1
    "1"
    

    zrem zremrangebyrank zremrangebyscore
    zrem删除指定成员;
    zremrangebyrank删除指定排名内的成员;
    zremrangebyscore删除指定分数内的成员;

    127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
    (integer) 4
    127.0.0.1:6379> zrange zset 0 -1 withscores
    1) "s1"
    2) "1"
    3) "s2"
    4) "2"
    5) "s3"
    6) "3"
    7) "s4"
    8) "4"
    127.0.0.1:6379> zrem zset s1
    (integer) 1
    127.0.0.1:6379> zrange zset 0 -1 withscores
    1) "s2"
    2) "2"
    3) "s3"
    4) "3"
    5) "s4"
    6) "4"
    127.0.0.1:6379> zremrangebyrank zset 0 0
    (integer) 1
    127.0.0.1:6379> zrange zset 0 -1 withscores
    1) "s3"
    2) "3"
    3) "s4"
    4) "4"
    127.0.0.1:6379> zremrangebyscore zset 3 4
    (integer) 2
    127.0.0.1:6379> zrange zset 0 -1 withscores
    (empty list or set)
    

    zrevrange zrevrangebyscore zrevrank
    zrevrank返回成员的倒序排名;
    zrevrange倒序取出指定范围的成员;
    zrevrangebyscore同理,倒序取出指定分数范围内的成员。

    127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
    (integer) 4
    127.0.0.1:6379> zrevrank zset s1
    (integer) 3
    127.0.0.1:6379> zrevrange zset 0 -1
    1) "s4"
    2) "s3"
    3) "s2"
    4) "s1"
    127.0.0.1:6379> zrevrangebyscore zset 3 1
    1) "s3"
    2) "s2"
    3) "s1"
    

    zinterstore zunionstore
    zinterstore表示返回指定zset中的交集,并存储到指定新的zset中,其中的数量表示有几个集合。
    zunionstore表示返回指定zset中的并集。

    zadd zset1 1 s1 2 s2
    (integer) 2
    127.0.0.1:6379> zadd zset2 1 s1 2 s3
    (integer) 2
    127.0.0.1:6379> zinterstore sum 2 zset1 zset2
    (integer) 1
    127.0.0.1:6379> zrange sum 0 -1
    1) "s1"
    127.0.0.1:6379> zunionstore sum2 2 zset1 zset2
    (integer) 3
    127.0.0.1:6379> zrange sum2 0 -1
    1) "s1"
    2) "s2"
    3) "s3"
    

    相关文章

      网友评论

          本文标题:Redis那些事-数据类型与常用命令

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