• redis学习(三)五种数据结构


    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    1、string

    string类型是Redis最基本的数据类型,一个键最大能存储512MB。

    基本的命令:

    set  key value 设置指定 key 的值

    get key 获取指定 key 的值

    keys  ? 匹配一个字符

    keys [0-2]匹配括号间任一个字符

    keys x匹配字符x的key

    keys * 匹配所有的key

    strlen key 返回 key 所储存的字符串值的长度。

    mset  key value key value 设置多个key的值

    mget  key  key 得到多个key的值

    exists key 判断key是否存在

    del key 删除key

    type key 判断key的数据类型

    setnx key value 只有在 key 不存在时设置 key 的值,如果存在则不变

    incrby key increment 将 key 所储存的值加上给定的增量值(increment) 

    decrby key increment 将 key 所储存的值减去给定的增量值(increment)

    expire key seconds 为给定 key 设置过期时间,以秒为单位

    ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)

    redis 127.0.0.1:6379> set k1 v1
    OK
    redis 127.0.0.1:6379> get k1
    "v1"
    redis 127.0.0.1:6379> keys k?
    1) "k3"
    2) "k1"
    3) "k4"
    4) "k2"
    5) "k5"
    redis 127.0.0.1:6379> keys k[0-2]
    1) "k1"
    2) "k2"
    redis 127.0.0.1:6379> keys *
    1) "k3"
    2) "k1"
    3) "k4"
    4) "k2"
    5) "k5"
    redis 127.0.0.1:6379> STRLEN k1
    (integer) 2
    redis 127.0.0.1:6379> mget k1 k2
    1) "v1"
    2) "v2"
    redis 127.0.0.1:6379> EXISTS k1
    (integer) 1
    redis 127.0.0.1:6379> DEL k1
    (integer) 1
    redis 127.0.0.1:6379> EXISTS k1
    (integer) 0
    redis 127.0.0.1:6379> type k2
    string

    2、hash

    hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对。

    基本命令:

    hset  key  field value 将哈希表 key 中的字段 field 的值设为 value 

    hmset key field value field value 同时将多个 field-value (域-值)对设置到哈希表 key 中。

    hgetall key 获取在哈希表中指定 key 的所有字段和值

    hget key field 获取存储在哈希表中指定字段的值

    hmget key field field 获取所有给定字段的值

    hexists key field 查看哈希表 key 中,指定的字段是否存在

    hkeys key 获取所有哈希表中的字段

    hvals key 获取哈希表中所有值

    hlen key 获取哈希表中字段的数量

    redis 127.0.0.1:6379> hmset student id 001 name zhangsan age 20 tel 56987856
    OK
    redis 127.0.0.1:6379> HGETALL student
    1) "id"
    2) "001"
    3) "name"
    4) "zhangsan"
    5) "age"
    6) "20"
    7) "tel"
    8) "56987856"
    redis 127.0.0.1:6379> hget student id
    "001"
    redis 127.0.0.1:6379> hget student name age
    (error) ERR wrong number of arguments for 'hget' command
    redis 127.0.0.1:6379> hmget student name age
    1) "zhangsan"
    2) "20"
    redis 127.0.0.1:6379> HEXISTS student tel
    (integer) 1
    redis 127.0.0.1:6379> HSET student height 180
    (integer) 1
    redis 127.0.0.1:6379> hkeys student
    1) "id"
    2) "name"
    3) "age"
    4) "tel"
    5) "height"
    redis 127.0.0.1:6379> HVALS student
    1) "001"
    2) "zhangsan"
    3) "20"
    4) "56987856"
    5) "180"
    redis 127.0.0.1:6379> HLEN student
    (integer) 5

    3、list

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 232 - 1 个元素

    基本命令:

    lpush key value value 从左边将一个或多个值插入到列表

    rpush key value value 从右边将一个或多个值插入到列表

    lrange key start stop 获取列表指定范围内的元素 (0 -1表示全部范围)

    lpop key 从左边移出并获取列表的第一个元素

    rpop key 从右边移出并获取列表的第一个元素

    llen key 获取key的大小

    lrem key count value 删除列表中为value的元素,返回实际删除的元素个数。count > 0:从列表左边开始删除值为value的元素,count < 0:从右边开始删除,count = 0:删除所有

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

    lindex key  index 通过索引获取列表中的元素 index为负数,表示从右边开始

    linsert key before|after pivot value linsert在列表的值为pivot的元素前或者后插入value

    redis 127.0.0.1:6379> lpush num 3 4 5 6
    (integer) 4
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    redis 127.0.0.1:6379> rpush num 2 1
    (integer) 6
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    redis 127.0.0.1:6379> LPOP num
    "6"
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    redis 127.0.0.1:6379> RPOP num
    "1"
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    redis 127.0.0.1:6379> LLEN num
    (integer) 4
    redis 127.0.0.1:6379> LREM num 1 4
    (integer) 1
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "5"
    2) "3"
    3) "2"
    redis 127.0.0.1:6379> LINDEX num 1
    "3"
    redis 127.0.0.1:6379> LINDEX num -1
    "2"
    redis 127.0.0.1:6379> LTRIM num 1 3
    OK
    redis 127.0.0.1:6379> LINDEX num -1
    "2"
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "3"
    2) "2"
    redis 127.0.0.1:6379> LINSERT num before 3 4
    (integer) 3
    redis 127.0.0.1:6379> LINSERT num before 4 5
    (integer) 4
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    redis 127.0.0.1:6379> LINSERT num after 2 1
    (integer) 5
    redis 127.0.0.1:6379> LRANGE num 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    redis 127.0.0.1:6379>

    4、set

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合中最大的成员数为 232 - 1

     基本命令:

    sadd key member 向集合添加一个或多个成员,如果元素已存在,则不会覆盖,返回成功添加的元素个数

    smembers key 返回集合中的所有成员

    sismenber key member 判断member是否是key的成员

    sdiff keyA keyB 返回给定所有集合的差集,即keyA-keyB

    sinter keyA keyB 返回给定所有集合的交集,即keyA∩keyB

    sunion keyA keyB 返回给定所有集合的并集,即keyA∪keyB

    sunionstore destination keyA keyB 将keyA∪keyB的值保存到destination

    spop key 移除并返回集合中的一个随机元素

    redis 127.0.0.1:6379> SADD set1 1 3 5
    (integer) 3
    redis 127.0.0.1:6379> SMEMBERS set1
    1) "1"
    2) "3"
    3) "5"
    redis 127.0.0.1:6379> SISMEMBER set1 3
    (integer) 1
    redis 127.0.0.1:6379> SADD set2 2 4 6
    (integer) 3
    redis 127.0.0.1:6379> SADD set3 1 2 3 4
    (integer) 4
    redis 127.0.0.1:6379> SDIFF set1 set3
    1) "5"
    redis 127.0.0.1:6379> SINTER set1 set3
    1) "1"
    2) "3"
    redis 127.0.0.1:6379> SUNION set1 set2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    redis 127.0.0.1:6379> SUNIONSTORE set12 set1 set2
    (integer) 6
    redis 127.0.0.1:6379> SMEMBERS set12
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    redis 127.0.0.1:6379> SPOP set12
    "6"

    5、zset

    有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

    zadd key score member 向有序集合添加一个或多个成员,或者更新已存在成员的分数

    zrange key start stop [withscores] 通过索引区间返回有序集合成指定区间内的成员,分数从低到高

    zrevrange  key start stop [withscores] 返回有序集中指定区间内的成员,通过索引,分数从高到底

    zscore key member 返回有序集中,成员的分数值

    zrangebyscore key min max 通过分数返回有序集合指定区间内的成员

    zrank  key member 返回有序集合中指定成员的索引

    redis 127.0.0.1:6379> ZADD zset 81 v1
    (integer) 1
    redis 127.0.0.1:6379> ZADD zset 82 v2 83 v3
    (integer) 2
    redis 127.0.0.1:6379> ZRANGE zset 0 -1 withscores
    1) "v1"
    2) "81"
    3) "v2"
    4) "82"
    5) "v3"
    6) "83"
    redis 127.0.0.1:6379> ZSCORE zset v1
    "81"
    redis 127.0.0.1:6379> ZRANGE zset 0 -1
    1) "v1"
    2) "v2"
    3) "v3"
    redis 127.0.0.1:6379> ZREVRANGE zset 0 -1
    1) "v3"
    2) "v2"
    3) "v1"
    redis 127.0.0.1:6379> ZRANGEBYSCORE zset 50 82
    1) "v1"
    2) "v2"
    redis 127.0.0.1:6379> ZINCRBY zset 2 v3
    "85"
    redis 127.0.0.1:6379> ZCOUNT zset 80 85
    (integer) 3
    redis 127.0.0.1:6379> ZREM zset v3
    (integer) 1
    redis 127.0.0.1:6379> ZRANGE zset 0 -1
    1) "1"
    2) "2"
    redis 127.0.0.1:6379> ZRANK zset v1
    (integer) 0
    redis 127.0.0.1:6379> ZRANK zset v2
    (integer) 1
    redis 127.0.0.1:6379>
  • 相关阅读:
    HDU 3389 Game (阶梯博弈)
    HDU1536&&POJ2960 S-Nim(SG函数博弈)
    HDU 2089 不要62(数位DP)
    ACdream 1210 Chinese Girls' Amusement(高精度)
    CodeForces 659D Bicycle Race (判断点是否为危险点)
    HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)
    手动删除Win7系统服务列表中残留服务的操作步骤
    C++学习37 string字符串的访问和拼接
    C++学习36 string类和字符串
    C++学习35 模板中的函数式参数
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7904577.html
Copyright © 2020-2023  润新知