V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lidiya
V2EX  ›  问与答

Redis 数据类型及其操作方法归纳

  •  
  •   lidiya · 2015-07-23 17:40:29 +08:00 · 1701 次点击
    这是一个创建于 3206 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Redis是一个key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等等。下面小编就和大家详细聊聊Redis的数据类型及其操作。

    String
    这是最简单的数据类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,如图片或序列化的对象。

    String的操作:
    Set:设置key对应的值为string类型的value,如 set name Fahy
    Setnx:设置key对应的值为string类型的value,如果key已经存在,返回0,如 setnx name Fahy
    Setex:设置key对应的值为string类型的value,并指定此键值对的有效期,如 setex name 10 Fahy
    Setrange:设置指定key的value值的子字符串,替换相同长度的字符,如 已有一对key-value为email=[email protected],则 setrange email 8 qq.com 会使email=[email protected]
    mset:一次设置多个key的值,成功返回ok表示所以值都被设置,失败返回0表示没有任何值被设置,如 mset key1 huangweijian key2 others
    msetnx:一次设置多个key的值,成功返回ok表示所有值都被设置,失败返回0表示没有任何值被设置,但不会覆盖以存在的key,如 msetnx key3 huangweineng key4 yellow
    get:获取key对应的value,如果key不存在,返回nill,如 get key1
    getset:设置key的值,并返回key的旧值,如 getset key2 huangsurong
    getrange:获取key的value值的子字符串,如 getrange key1 0 4,返回从第0到第4个字符"huang"
    mget:一次获取多个key的值,如果对应的key不存在,返回nil,如 mget key1 key2 key3
    incr:对key的值做++操作,并返回新的值,当key不存在时,设置key值为0再进行加操作,如 incr key5
    incrby:对key的值做加指定值操作,当key不存在时,设置key值为0再进行加操作,如 incrby key6 7
    decr:对key的值做--操作,当key不存在时,设置key值为0再进行减操作,如 decr key7
    decrby:对key的值做减指定值操作,当key不存在时,设置key值为0再进行减操作,如 decrby key8 7
    append:给指定key的字符串追加value,返回新字符串值的长度,当key不存在时,添加该key,如 append key1 @sina.com
    strlen:返回指定key的value长度,如 strlen key1
    del:删除指定key,如 del key1
    hashes:可建立一张hash表

    Hash
    Redis hash是一个string类型的field(字段)和value的映射表,它的添加、删除操作都是O(I)(平均)。适合存储对象,占用更少的内存,并且方便存储整个对象。

    操作:
    hset:设置hash field为指定值,如果key不存在,则先创建,如 hset hashtable field hello
    hsetnx:设置hash field为指定值,如果key不存在,则先创建,如果存在返回0,如 hsetnx hashtable field1 world
    hmset:同时设置hash的多个field,如 hmset hashtable field2 helloween field3 christmas
    hget:获取指定的hash field,如 hget hashtable field
    hmget:获取全部指定的hash field,如 hmget hashtable field field1 field2
    hincrby:指定的hash field加上特定值,如 hincrby hashtable field4 5
    hdecrby:指定的hash field减去特定值,如 hdecrby hashtable field4 5
    hexists:判断指定field是否存在,如 hexists hashtable field4
    hlen:返回指定hash的field数量,如 hlen hashtable
    hdel:删除指定hash的field,如 hdel hashtable field
    hkeys:返回hash的所有field,如 hkeys hashtable
    hvals:返回hash的所有value,如 hvals hashtable
    hgetall:获取某个hash中全部的field几value,如 hgetall hashtable
    lists:一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字。

    List
    Redis的list类型其实就是一个每个子元素都是string类型的双向链表。既可作为栈,又可作为堆 。

    操作:
    lpush:在key对应list的头部添加字符串元素,如 lpush list hello
    rpush:在key对应的list的尾部添加字符串元素,如 rpush list world
    linsert:在key对应list的特定位置前或后添加字符串,如 linsert list before world my 或 linsert list after hello you
    lset:设置list中指定下表的元素值,如 lset list 1 he
    lrange:返回指定范围内的元素,如 lrange list 0 -1
    lrem:从key对应的list中删除n个和value相同的元素,n<0从尾删除,n=0全部删除,如 lrem list 1 you
    ltrim:保留指定范围内的数据,如 ltrim list 1 -1
    lpop:从list头部删除元素,并返回删除元素,如 lpop list
    rpop:从list尾部删除元素,并返回删除元素,如 rpop list
    rpoplpush:移除第一个list尾部元素到第二个list头部,如 rpoplpush list1 list2
    lindex:返回名称为key的list的index位置的元素,如 lindex list 1
    llen:返回key对应的list的长度,如 llen list
    sets:集合,是string类型的无序集合

    Set
    Redis的set类型通过hash table实现的,添加、删除和查找的复杂度都是O(1)。对集合可以取并集、交集和差集。

    操作:
    sadd:向名称为key的set中添加元素,如 sadd settable hello
    srem:删除名称为key的set中的元素,如 srem settable two
    smember:获取名称为key的set中的所有元素,如 smember settable
    spop:随机返回并删除名称为key的set中的元素,如 spop settable
    sdiff:返回以key1为标准,与其他key不同的元素,如 sdiff set1 set2
    skiffstore:将以key1为标准,与其他key不同的元素,存到key3中,如 sdiffstore key3 key1 key2
    sinter:返回所有给定key的交集,如 sinter set1 set2
    sinterstore:将所有给定key的交集存储到另一个key中,如 sinterstore key key1 key2
    sunion:返回所有给定key的并集,如 sunion set1 set2
    sunionstore:将所有给定key的并集存储到另一个key中,如 sunionstore key key1 key2
    smove:从第一个key对应的set中移除member并添加到第二个对应的set中,如 smove set1 set2 hello
    scard:返回名称为key的set元素个数,如 scard set1
    sismember:测试member是否属于名称为key的set的元素,如 sismember set member
    srandmember:随机返回名称为key的set的一个元素,如 srandmember set

    Zset
    在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以制定,每次指定后,zset会重新按新的值调整顺序,序号可相同,值不可相同。

    操作:
    zadd:向名称为key的set中添加元素,并指定序号,如 zadd settable 1 hello
    zrange:返回指定索引范围内的元素,添加withscores,返回序号,如 zrange settable 0 -1 withscores
    zrem:删除名称为key的zset中个元素member,如 zrem settable hello
    zincrby:如果在名称为key的zset中给已经存在元素member,则该元素的score增加increment,否则,向该集合中添加该元素,起score的值为increment,如 zincrby settable 2 earth
    zrank:返回名称为key的zset中member元素的排名(按score从小到大排序),如 zrank settable earth withscores
    zrevrank:返回名称为key的zset中member元素的排名(按score从大到小排序),如 zrevrank settable earth withscores
    zrevrange:返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素,如 zrevrange settable 0 -1 withscores
    zrangebyscore:返回集合中score在给定区间的元素,如 zrangebyscore settable 1 3 withscores
    zcount:返回集合中score在给定区间的元素个数,如 zcount settable 1 3
    zcard:返回集合中的元素个数,如 zcard settable
    zremrangebyrank:删除集合中排名的索引在给定区间的元素,如 zremrangebyrank settable 1 1
    zremrangebyscore:删除集合中score在给定区间的元素,如 zremrangebyscore settable 1 2

    以上就是redis几个常用的数据类型及其用处,希望对你平时的开发工作有帮助。如果需要了解更多redis相关知识,可以继续学习《redis视频教程》(http://www.maiziedu.com/course/php/337-5915/)。

    mingyun
        1
    mingyun  
       2015-07-23 22:16:35 +08:00
    视频不错,学习下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   905 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:07 · PVG 07:07 · LAX 16:07 · JFK 19:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.