Redis 基础:Redis 数据类型

Redis 数据类型

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

String(字符串)

string时redis最基本的类型,可以理解为与Memcached一模一样的类型,一个key对应一个value。string类型时二进制安全的,意思是redis的string可以包含任何数据,比如:jpg图片或者序列化的对象。string类型是redis最基本的数据类型,一个key最大能存储512M。

实例

> SET name "Hello"
OK
> GET name 
"Hello"

在以上实例中我们使用了Redis的SET和GET命令,键为name,对应的值为"Hello",注意:一个键最大能存储512M。

Redis 字符串命令

SET key value:设置指定key的值;
GET key:获取指定key的值;
GETRANGE key start end:返回key中字符串的字串;
GETSET key value:将给定key的值设置为value,并返回key的旧值(old value);
GETBIT key offset:对key所存储的字符串值,获取指定偏移量上的位(bit);
MGET key1[key2...]:获取所有(一个或多个)给定key的值;
SETBIT key offset value:对key所存储的字符串值,设置或清除指定偏移量上的位(bit);
SETEX key seconds value:将value关联到key,并将key的过期时间设为seconds(以秒为单位);
SETNX key value:只有在key不存在时设置key的值;
SETRANGE key offset value:用value参数覆写给定的key所存储的字符串值,从偏移量offset开始;
STRLEN key:返回key所存储的字符串值的长度;
MSET key value [key value ...]:同时设置一个或多个key-value对;
MSETMX key value [key value ...]:同时设置一个或多个key-value对,当且仅当所有给定key都不存在;
PSETEX key milliseconds value:这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,而不是像SETEX命令那样,以秒为单位;
INCR key:将key中存储的数字值增1;
INCRBY key increment:将key所存储的值加上给定的增量值(increment);
INCRBYFLOAT key increment:将key所存储的值加上给定的浮点增量值(increment);
DECR key:将key中存储的数字值减1;
DECRBY key decrement:key所存储的值减去给定的减量值(decrement);
APPEND key value:如果key已经存在并且是一个字符串,APPEND命令将指定的value追加到该key原来值(value)的末尾;

Hash(哈希)

Redis hash是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

实例

> HMSET myhash name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
> HGETALL myhash
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

实例中我们使用Redis HMSET设置了redis的一些描述信息(name,description,likes,visitors)到哈希表的myhash中,每个hash可以存储2**32-1键值对(40多亿)。

Redis hash命令

HDEL key field1 [field2 ...]:删除一个或多个哈希表字段;
HEXISTS key field:查看哈希表key中,指定的字段是否存在;
HGET key field:获取存储在哈希表中指定字段的值;
HGETALL key:获取在哈希表中指定key的所有字段和值;
HINCRBY key field increment:为哈希表key中的指定字段的整数值加上增量increment;
HINCRBYFLOAT key field increment:为哈希表key中的指定字段的浮点数值加上增量increment;
HKEYS key:获取所有哈希表中的字段;
HLEN key:获取哈希表中字段的数量;
HMSET key field1 value1 [field2 value2]:同时将多个field-value(字段-值)对设置到哈希表key中;
HSET key field value:将哈希表key中的字段field的值设为value;
HSETNX key field value:只有在字段field不存在时,设置哈希表字段的值;
HVALS key:获取哈希表中所有值;
HSCAN key cursor[MATCH pattern][COUNT count];

List(列表)

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

实例

> LPUSH mylist redis
(integer) 1
> LPUSH mylist mongodb
(integer) 2
> LPUSH mylist mysql
(integer) 3
> LRANGE mylist 0 10

1) "mysql"
2)"mongodb"
3)"redis"

在以上实例中我们使用了LPUSH将三个值插入了名为mylist的列表中。

Redis 列表命令

BLPOP key1[key2] timeout:移除并获取列表中的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止;
BRPOP key1[key2] timeout:移除并获取列表中的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止;
BRPOPLPUSH source destination timeout:从列表中弹出一个值,将淌出的元素插入到另一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止;
LINDEX key index:通过索引获取列表中的元素;
LINSERT key BEFORE|AFTER pivot value:在列表的元素前或后插入元素;
LLEN key:获取列表长度;
LPOP key:移除并获取列表的第一个元素;
LPUSH key value1[value2]:将一个或多个值插入到列表头部;
LPUSH key value:将一个值插入到已存在的列表头部;
LRANGE key start stop:获取列表范围内的元素;
LREM key count value:移除列表元素;
LSET key index value:通过索引设置列表元素的值;
LREIM key start stop:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间内的元素都将被删除;
RPOP key:移除并获取列表最后一个元素;
RPOPLPUSH source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回;
RPUSH key value1[value2]:在列表中添加一个或多个值;
RPUSHX key value:为已存在的列表添加值;

Set(集合)

Redis的Set是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1),集合中最多可以包含2**32-1个元素(每个列表超过40亿个元素)。

实例

> SADD myset redis
(integer) 1
> SADD myset mongodb
(integer) 1
> SADD myset mysql
(integer) 1
> SADD myset mysql
(integer) 0
> SMEMBERS myset

1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们通过SADD命令向名为myset的集合插入三个元素。

Redis 集合命令

SADD key member1[member2]:向集合添加一个或多个成员;
SCADD key:获取集合的成员数;
SDIFF key1[key2]:返回给定所有集合的差集;
SDIFFSTORE destination key1[key2]:返回给定所有集合的差集并存储在destination中;
SINTER key1[key2]:返回给定所有集合的交集;
SINTERSTORE destination key1[key2]:返回给定所有集合的交集并存储在destination中;
SISMEMBER key member:判断member元素是否是集合key的成员;
SMEMBERS key:返回集合中所有成员;
SMOVE source destination member:将member元素从source集合移动到destination集合;
SPOP key:移除并返回集合中的有个随机元素;
SRANDMEMBER key [count]:返回集合中一个或多个成员;
SUNION key1[key2]:返回所有给定集合的并集;
SUNIONSTORE destination key1[key2]:将所有给定集合的并集存储在destination集合中;
SSCAN key cursor [MATCH pattern][COUNT count]:迭代集合中的元素;

Sorted Set(有序集合)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)去可以重复。集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1),集合中最多可以包含2**32-1个元素(每个列表超过40亿个元素)。

实例

> ZADD mysset 1 redis
(integer) 1
> ZADD mysset 2 mongodb
(integer) 1
> ZADD mysset 3 mysql
(integer) 1
> ZADD mysset 3 mysql
(integer) 0
> ZADD mysset 4 mysql
(integer) 0
> ZRANGE mysset 0 10 WITHSCORES

1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

在以上实例中我们通过ZADD命令向redis的有序集合中添加了三个值并关联上分数。

Redis 有序集合命令

ZADD key score1 member1[score2 member2]:向有序集合添加一个或多个成员,或者更新已存在成员的分数;
ZCARD key:获取有序集合的成员数;
ZCOUNT key min max:计算在有序集合中指定区间分数的成员数;
ZINCRBY key increment member:有序集合中对指定成员的分数加上增量increment;
ZINTERSTORE destination numkeys key [key...]:计算给定的一个或多个有序集的交集并将结果存储在新的有序集合key中;
ZLEXCOUNT key min max:在有序集合中计算指定区间内成员数量;
ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合指定区间内的成员;
ZRANGEBYEX key min max[LIMIT offset count]:通过字典区间返回有序集合的成员;
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT]:通过分数返回有序集合指定区间内的成员;
ZRANK key member:返回有序集合中指定成员的索引;
ZREM key member[member...]:移除有序集合中的一个或多个成员;
AREMRANGEBYEX key min max:移除有序集合中给定的字典区间的所有成员;
ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员;
ZREMRANGEBYSCORE key min max:移除有序集合中给定的分数区间的所有成员;
ZREVRANGEBYSCORE key max min[WITHSCORES]:返回有序集合中指定分数区间内的成员,分数从高到低排序;
ZREVRANK key member:返回有序集合中指定成员的排名,有序集合成员按分数值递减(从大到小)排序;
ZSCORE key member:返回有序集合中成员的分数值;
ZUNIONSTORE destination numkeys key [key...]:计算给定的一个或多个有序集的并集,并存储在新的key中;
ZSCAN key cursor[MATCH pattern][COUNT count]:迭代有序集合中的元素(包括元素成员和元素分值);
posted @ 2018-07-03 15:41  月缺一格  阅读(252)  评论(0编辑  收藏  举报