Redis基本数据类型

-------------------Redis基本数据类型-------------------
一、String 字符串
    一、概念
        一、String 是redis最基本的类型,value 不只能够是 String,也能够是数字;使用 Strings 类型,能够彻底实现目前 Memcached 的功能,而且效率更高。还能够享受 Redis 的定时持久化(能够选择 RDB 模式或者 AOF 模式);string类型是二进制安全的。意思是redis的string能够包含任何数据,好比jpg图片或者序列化的对象;string类型是Redis最基本的数据类型,一个键最大能存储512MB。
 
    二、命令
        一、set:设置key对应的值为string类型的value。
            >set "name" "hello"
        二、setnx(set if not exists):将key设置值为value,若是key不存在,这种状况下等同set命名;当key值存在,什么也不作。
            >setnx "name" "hello"
        三、setex:设置key对应字符串value,而且设置key在给定的seconds时间以后超时过时。
            >setex "color" 10 "red"
            >get "color" --- red
            十秒事后
            >get "color" --- (nil)
        四、setrange:覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。
            >set "email" "redis@126.com" --- "ok"
            >setrange "email" 6 "gmail.com" --- (integer) 14
            >get "email" --- redis@gmail.com
        五、mset:一次设置多个值,成功返回ok表示全部的值都设置了,失败返回0表示没有任何值被设置。
            >mset "key1" "python" "key2" "c++" --- "ok"
            >get "key1" --- "hello"
            >get "key2" --- "world"
        六、mget:一次获取多个key的值,若是对应key不存在,则对应返回nil。
            >mget "key1" "key2" "key3"
        七、msetnx:对应给定的keys到他们相应的values上。只要有一个key已经存在,msetnx一个操做也不会执行。
            >msetnx "key1" "hello" "key2" "world" --- (integer) 0
        八、getset:设置key的值,并返回key的旧值。
            >get "name" --- "hello"
            >getset "name" "newName" --- "hello"
            >get "name" --- "newName"
        九、getrange key start end:获取指定key的value值的字符串。是由start和end的位移决定的。
            >get "name" --- "newName"
            >getrange "name" 1 3 --- "ewN"
        十、incr 对key的值加1 操做
            >set "age" 18 --- "ok"
            >incr "age" --- (integer) 19
            >get "age" ---"19"
        十一、incrby:用incr相似,加指定值,key不存在的时候会设置key,并认为原来的value值为0。
            >incrby age 5 ---(integer) 24
            >incrby age1111 5 --- (integer) 5
            >get age1111 --- "5"
 
 
        十二、decr:对key的值作的事渐减操做,decr一个不存在key,则设置key为1.
            >get age --- "24"
            >decr age --- "23"
 
        1三、decrby:同decr,减指定值,key不存在的时候会设置key,并认为原来的value值为1.
            >get age --- "23"
            >decrby age 10 --- "13"
 
        1四、append:给指定key的字符串值追加value,返回新字符串值的长度。例如咱们向name的值追加一个"redis"字符串:
            >set "name" "value" --- OK
            >append "name" "_newValue" --- (integer) 14
            >get "name" ---"value_newValue"
 
二、Hash 哈希
    一、概念:
        Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象;Redis中每一个hash能够存储2的32次方-1个键值对(40多亿)
    二、命令:
        一、hset:设置指定的hash field1。
        >hset "myhash" "field1" "hello" --- (integer) 1
 
        二、hsetnx:只在key指定的哈希集中不存在的字段时,设置字段的值。若是key指定的哈希集不存在,会建立一个新的哈希集并与 key 关联。若是字段已存在,该操做无效果。
        >hsetnx "myhash" "field1" "hello"。 --- (integer) 1
 
        三、hmset:同时设置hash多个field。
        >hmset "myhash" "field1" "hello" "field2" "world" ---OK
 
        四、hget:获取指定的hash值的field。
        >hget "myhash" "field1" --- "hello"
 
        五、hgetall:获取全部的hash值的数据。
        >hgetall "myhash" ---
            1) "field1"
            2) "hello"
            3) "field2"
            4) "world"
 
        六、hmget:获取hash值的多个field值。
        >hmget "myhash" "field1" "field2" "field3" ---
            1) "hello"
            2) "world"
            3) (nil)
 
        七、hincrby:指定的hash field值,加上给定的值。
        >hset "myhash" "field3" "0" --- (integer) 1
        >hincrby "myhash" "field3" 1 --- (integer) 1
        >hincrby "myhash" "field3" -8 --- (integer) -7
 
        八、hexists:测试指定field是否存在。
        >hexists "myhash" "field1" --- (integer) 1
        >hexists "myhash" "field9" --- (integer) 0
 
        九、hkeys:查看指定哈希中全部的key值。
        >hkeys "myhash" ---
            1) "field1"
            2) "field2"
            3) "field3"
 
        十、hdel:从key指定的哈希集中移除指定的域。
        >hdel "myhash" "field1" --- (integer) 1
 
        十一、hlen:返回指定hash的field数量。
        >hlen "myhash" --- (integer) 2
 
        十二、hvals:返回指定hash中全部的value值。
        >hvals "myhash" ---
            1) "world"
            2) "-7"
 
三、List 列表
    一、概念:
        列表类型能够存储一个有序的字符串列表,经常使用的操做时向列表两端添加元素,或者得到列表的某一个片断;列表类型内部是使用双向链表(double linked list)实现的,因此向列表两端添加元素的时间复杂度为O(I),获取越接近两端的元素,速度就越快。
    二、命令:   
        一、lpush:从左边向list列表中插入数据。
        >lpush "mylist" "100001"
        >lpush "mylist" "100002"
        >lpush "mylist" "100003" "100004"
 
        二、rpush:从右边向list列表中插入数据。
        >rpush "mylist" "100005"
        >rpush "mylist" "100006"
 
        三、lpop:从列表左侧将数据弹出。
        >lpop "mylist" --- "100004"
 
        四、rpop:从列表右侧将数据弹出。
        >rpop "mylist" --- "100006"
 
        五、llen:获取列表中元素的个数。
        >llen "mylist":--- (integer) 4
 
        六、lrange key start stpo:返回索引从start到stop之间的全部元素(包含两端元素)。
        >lrange "mylist" 0 -1 ---
            1) "100003"
            2) "100002"
            3) "100001"
            4) "100005"
 
        七、lrem key count value:删除列表中前count个值为value的元素,返回删除的个数
            一、count>0时 lrem 命令从列表左边开始删除前count个值为value的元素。
            二、count<0时 lrem命令从列表右边开始删除前count个值为value的元素。
            三、count=0时 lrem命令会删除全部值为value的元素。
        >lpush "mylist" 2 2 2 --- (integer) 7
        >rpush "mylist" 2 2 --- (integer) 10
        >lrem "mylist" 1 2 --- (integer) 1
        >lrem "mylist" -2 2 --- (integer) 2
        >lrem "mylist" 0 2 --- (integer) 2
 
        八、lindex key index:根据索引下标获取指定的列表元素。
            >lindex "mylist" 1 --- "100002"
 
        九、ltrim key start end:能够删除指定索引范围以外的全部元素,其指定列表范围的方法和lrange命令相同。
            >ltrim "mylist" 0 -2 --- OK
 
        十、linsert key before|after privot value:首先会在列表中从左到右查找值为pivot的元素,而后根据第二个参数是before仍是after来决定将value插入到该元素的前面仍是后面,返回插入后列表元素的个数
            >lrange "mylist" 0 -1 ---
                1) "100003"
                2) "100002"
                3) "100001"
                4) "100005"
 
            >linsert "mylist" before "100003" "3"
            >linsert "mylist" after "100003" "4" 
                1) "3"
                2) "100003"
                3) "4"
                4) "100002"
 
        十一、rpoplpush source destination:将元素从一个列表转到另外一个列表。
            >rpoplpush "mylist" "mylistnew" --- "100002"
            >lrange "mylistnew" 0 -1
                1) "100002"
 
四、Set 集合
    一、概念:
        在集合中的每一个元素都是不一样的,且没有顺序。一个集合类型(set)键能够存储至多2的32次-1个字符串。集合类型的经常使用操做时向集合中加入或删除元素、判断某个元素是否存在等,因为集合类型在Redis内部是使用值为空的散列表(hash table)实现,因此这些操做的时间复杂度都是O(I)。最方便的是多个集合类型键之间还能够进行并集、交集、差集运算。
    二、集合与列表的区别:
        列表具备有序性,集合具备惟一性。
    二、命令:
        一、sadd:用来向集合中添加一个或多个元素,若是键不存在则会自动建立。由于在一个集合中不能有相同的元素,因此若是要加入的元素已经存在于集合中聚会忽略这个元素。
        >sadd letters a ---
        >sadd letters a b c ---
 
        二、smembers key:命令会返回集合中的全部元素
        >smembers letters
 
        三、sismember key member:判断一个元素是否在集合中是一个时间复杂度为O(I)的操做,不管集合中有多少个元素,sismember命令始终能够极快的返回结果。当值存在是sismembers 命令返回1 ,当值不存在或键不存在是返回0
        >sismember letters a
        >sismember letters d
        四、集合间运算
            一、sdiff key:对多个集合执行差集运算。
            >sadd setA 1 2 3
            >sadd setB 2 3 4
            >sdiff setA setB
            >sdiff SetB setA
            二、sinter key:对多个集合执行交集运算。
            >sinter setA setB
            三、sunion key:对多个集合执行并集运算。
            >sunion setA setB
        五、scard key:获取集合中元素个数。
            >smembers letters
            >scard letters
        六、spop letters:从集合中弹出一个元素。
            >spop letters
            >smembers letters
 
五、zset(Sorted set:有序集合)
    一、概念:
    在集合类型的基础上有序集合类型为集合中的每一个元素都关联了一个分数,这使得咱们不只能够完成插入,删除和判断元素是否存在等集合类型支持的操做,还可以得到分数最高(或最低)的前N个元素,得到指定分数范围内的元素等与分数有关的操做。虽然集合中每一个元素不一样,可是他们的分数能够相同。
 
    二、有序集合与列表比较:
        一、类似处:
            一、两者都是有序的。
            二、两者均可以得到某一范围的元素。
        二、区别:
            一、列表类型是经过链表实现,获取靠近两端的数据速度快,当元素增长后,访问中间数据的速度会变慢。
            二、有序集合类型是使用散列和跳跃表实现的,因此即便读取位于中间部分的数据速度也很快(时间复杂度O(log(N)))。
            三、列表中不能简单的调整某个元素的位置,可是有序集合能够
            四、有序集合要比列表类型更消耗内存。
    二、命令:
        一、zadd:用来向有序集合中加入一个元素和该元素的分数,若是该元素已经存在则会用心的分数替换原来的分数。zadd命令的返回值是新加入到集合中的元素的个数。
        >zadd scoreboard 89 Tom 67 Peter 100 David --- (integer) 3
        注:分数不只是整数,还支持双精度浮点数.
 
        二、zscore key member:获取元素的分数
        >zscore scoreboard Tom --- "89"
 
        三、zrange key start top:按照元素分数从小到大的顺序返回索引从start到stop之间的全部元素           
        >zrange scoreboard 0 -1
            1) "Peter"
            2) "Tom"
            3) "David"
 
        四、zrevrange key start top:按照元素分数从大到小的顺序放回索引从start到stop之间的全部元素
        >zrevrange scoreboard 0 -1
            1) "David"
            2) "Tom"
            3) "Peter"
 
        五、zrangebyscore key min max:按照元素分数从小到大的顺序返回分数在min和max之间的元素。
        >zrangebyscore scoreboard 85 100
            1) "Tom"
            2) "David"
 
        六、zincrby key increment member:增长一个元素的分数,返回值是更改后的分数。
        >zincrby scoreboard 4 Tom --- "93"
相关文章
相关标签/搜索