美文网首页
常用数据结构

常用数据结构

作者: yschen | 来源:发表于2018-07-23 21:57 被阅读0次

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

    1、String

    string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

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

    set:设置key的值                                  set aa "aa"//OK    set bb "bb"//OK  set age 1 //OK   

    del :删除key                                         del age  //1

    get:获取key对应的值                           get aa//"aa"

    mget:批量获取多个key的值,如果可以不存在则返回nil                  mget aa bb//1) "aa"  2) "bb"      mget aa cc//1) "aa"  2)  (nil)

    incr && incrby:incr对key对应的值进行++操作,并返回新的值;incrby加指定值                incr age //2    incrby age 3  //5

    incr操作由于它的原子性,在高并发下的计数、秒杀等场景下使用非常方便。

    2、Hash

    hash 是一个键值对集合,是一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value)。类比于 Java里面的 Map集合,特别适合用于存储对象型的数据。 

    hset:hset key field value将哈希表key中的域field的值设置为value,如果key不存在,则创建一个新的hash表。

    hset hs k1 value1  //1

    hget:hget key field 返回哈希表中给定域field的值

    hget hs k1 //value1

    hdel:hdel key dield 删除哈希表中给定域的值,不存在的域则忽略

    hdel hs k1 //1

    hexists:hexists key field 判断哈希表中是否存在field,存在返回1,不存在返回2

    hgetall:hgetall key   返回哈希表key中所有的key,value

    hincrby:hincrby key field value  将hash表key中的filed值加上value

    3、List

    List是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样list即可以作为栈,也可以作为队列。

    lpush:lpush list v1 v2 v3...将1个或多个value插入到列表list的表头 lpush list v1 v2 v3 //3

    lpushx:lpushx list v4  每次只能插入一个元素到表头,如果list不存在则忽略。lpushx list v4//4

    lpop:lpop list 移除并返回列表list的头元素

    lrange:lrange list 0 2 //

    lrem:lrem list count value   删除list中值为value的元素,count大于0从头搜到尾,count小于0从尾搜到头,count为0时移除所有与value相同的元素

    lset:lset list index value  将list中下标为index的元素的值设置为value   

    lset mylist 0 aaaaa      //ok   

    lset mylist 100 aaaaa    //(error) ERR index out of range

    lindex:lindex list index

    4、Set

    在redis中,我们可以将set类型看做无序的字符集合,可包含最大元素数量为4294967295个,和list不同的是,set中不允许出现重复的元素。

    sadd:sadd set value1 value2 ..将一个或者多个元素加入到set中,已存在的元素被忽略

    sadd myset v1 v2 v3   //(integer) 3

    scard:scard set  返回集合set的元素个数   scard myset //(integer) 3

    sdiff:sdiff set 返回集合所有元素,sdiff set1 set2返回set1与set2的差集        sinter为交集

    sdiffstore:sdiffstore destionation key ..与sdiff类似,但是会将返回的集合保存到指定的集合destionation 中,如果destionation已存在则覆盖 ,与之对应的有sinterstore

    sinmember:sismember set value  判断set集合是否存在value 存在返回1不存在返回0

    smembers:smembers set 返回集合set中所有元素

    smove:smove sourceset destionationset value 将value从集合sourceset 移到集合destionationset 中,如果sourceset不存在value,则忽略操作,如果destionationset 已存在该元素,则只是将sourceset中的value删除

    5、Zset

    zset(sorted set 有序集合),和上面的set 数据类型一样,也是 string 类型元素的集合,但是它是有序的。

    zadd :zadd zset score value [score value]将一个或多个 值及其权重添加到有序集合zset中,如果zset中已经存在value那么更新value的权重。

    zadd zset 1 a 2 b 3 d 4 c         //(integer) 4

    zcard:zcard zset返回有序集合zset的元素个数           zcard zset ////(integer) 4

    zcount:zcount zset min max 返回有序集合zset中权重大于等于min小于等于max的元素个数

    zcount zset 2 3  //(integer) 2

    zrange:zrange zset start end [withscores] 返回指定区间内的成员,并且按照权重进行排序,权重相同时按字典序返回,如果结尾带关键字withscores,那么将每个元素的权重也一并返回

    zrange zset 0 -1        //1) "a"    2) "b"    3) "d"    4) "c"

    zrange zset 0 -1 withscores       //1) "a "   ///2) "1"    //3) "b"    //4) "2"    //5) "d"    //6) "3"    //7) "c"    //8) "4"

    zrank:zrank zset value返回value在有序集合zset中的排序,按权重从小到大进行排序,起始值为0

    zrank zset c    //(integer) 3

    zrem:zrem zset value1 value2 ...移除有序集合zset中值为value1的元素,如果有序集合zset不存在该元素则忽略操作

    zrem zset c    //(integer) 1        zrem zset e    //(integer) 0       

    zrange zset 0 -1    //1) "a"    2) "b"    3) "d"

    相关文章

      网友评论

          本文标题:常用数据结构

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