来源:http://edu.jb51.net/redis/redis-data-types.html
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1、String
string是redis最基本的类型,一个键最大能存储512M,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。语法:SET name "jay" GET name
2、Hash(哈希)
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。每个 hash 可以存储 232 -1 键值对(40多亿)。
语法:HMSET key KeyValueMap,键值对用空格分开。
HMSET user:1 username jay password 111111 points 200
HGETALL user:1
3、List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
List命令:
lindex:通过索引获取列表中的元素;语法:LINDEX KEY_NAME INDEX_POSITION,可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;指定索引不存在,返回 nil。
lpush:将一个或多个值插入到列表头部,语法:lpush KEY_NAME Values,在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。
rpoplpush:移除列表的最后一个元素,并将该元素添加到另一个列表的首部;返回被弹出的元素;如果指定要移除的列表不存在,则返回nil;如果“另一个列表不存在”,则新创建一个。语法:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
blpop:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超过timeout时或发现可弹出元素为止,timeout单位是秒,超时后,说明列表为空,返回一个 nil跟时间,
没有超时,说明列表不为空,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。注:TIMEOUT是必须要填的,不是选填。
语法:BLPOP List1 List2 .. ListN TIMEOUT
brpop:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,语法:BRPOP List1 List2 .. ListN TIMEOUT
brpoplpush:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止;假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长;
反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长(注意:如果时间短立马可以获得到的话,只会返回一个元素即被弹出元素的值)
语法:BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT
lrem:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素;
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
count = 0 : 移除表中所有与 VALUE 相等的值
返回被移除元素的数量,列表不存在时或者表中没有相同元素时返回 0
语法:LREM KEY_NAME COUNT VALUE
ltrim:列表修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除;下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推;你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;命令执行成功时,返回 ok,语法:LTRIM KEY_NAME START STOP
lpushx:将一个或多个值插入到已存在的列表头部,列表不存在时操作无效;返回LPUSHX 命令执行之后,列表的新长度;列表不存在时或者对已经没有元素的列表操作时返回0,语法:LPUSHX KEY_NAME VALUE1.. VALUEN,另一个命令rpushx是插入到尾部。
lset:通过索引来设置元素的值;操作成功返回 ok ;当索引参数超出范围,返回一个错误;对一个空列表进行 LSET 时或者key不存在时返回错误信息,语法:LSET KEY_NAME INDEX VALUE
llen:命令用于返回列表的长度;如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 ;如果 key 不是列表类型,返回一个错误,语法:LLEN KEY_NAME
linsert:用于在列表的元素前或者后插入元素;当指定元素不存在于列表中时,不执行任何操作;当列表不存在时,被视为空列表,不执行任何操作;如果 key 不是列表类型,返回一个错误;如果命令执行成功,返回插入操作完成之后,列表的新长度;如果没有找到指定元素 ,返回 -1;如果 key 不存在或为空列表,返回 0,语法:LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。语法:LRANGE KEY_NAME START END
4、Set(集合)
Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。sadd 命令:添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
语法:sadd key member
5、zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令,添加元素到集合,元素在集合中存在则更新对应score,语法:zadd key score member
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1、String
string是redis最基本的类型,一个键最大能存储512M,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。语法:SET name "jay" GET name
2、Hash(哈希)
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。每个 hash 可以存储 232 -1 键值对(40多亿)。
语法:HMSET key KeyValueMap,键值对用空格分开。
HMSET user:1 username jay password 111111 points 200
HGETALL user:1
3、List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
List命令:
lindex:通过索引获取列表中的元素;语法:LINDEX KEY_NAME INDEX_POSITION,可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;指定索引不存在,返回 nil。
lpush:将一个或多个值插入到列表头部,语法:lpush KEY_NAME Values,在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。
rpoplpush:移除列表的最后一个元素,并将该元素添加到另一个列表的首部;返回被弹出的元素;如果指定要移除的列表不存在,则返回nil;如果“另一个列表不存在”,则新创建一个。语法:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
blpop:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超过timeout时或发现可弹出元素为止,timeout单位是秒,超时后,说明列表为空,返回一个 nil跟时间,
没有超时,说明列表不为空,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。注:TIMEOUT是必须要填的,不是选填。
语法:BLPOP List1 List2 .. ListN TIMEOUT
brpop:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,语法:BRPOP List1 List2 .. ListN TIMEOUT
brpoplpush:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止;假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长;
反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长(注意:如果时间短立马可以获得到的话,只会返回一个元素即被弹出元素的值)
语法:BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT
lrem:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素;
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
count = 0 : 移除表中所有与 VALUE 相等的值
返回被移除元素的数量,列表不存在时或者表中没有相同元素时返回 0
语法:LREM KEY_NAME COUNT VALUE
ltrim:列表修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除;下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推;你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;命令执行成功时,返回 ok,语法:LTRIM KEY_NAME START STOP
lpushx:将一个或多个值插入到已存在的列表头部,列表不存在时操作无效;返回LPUSHX 命令执行之后,列表的新长度;列表不存在时或者对已经没有元素的列表操作时返回0,语法:LPUSHX KEY_NAME VALUE1.. VALUEN,另一个命令rpushx是插入到尾部。
lset:通过索引来设置元素的值;操作成功返回 ok ;当索引参数超出范围,返回一个错误;对一个空列表进行 LSET 时或者key不存在时返回错误信息,语法:LSET KEY_NAME INDEX VALUE
llen:命令用于返回列表的长度;如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 ;如果 key 不是列表类型,返回一个错误,语法:LLEN KEY_NAME
linsert:用于在列表的元素前或者后插入元素;当指定元素不存在于列表中时,不执行任何操作;当列表不存在时,被视为空列表,不执行任何操作;如果 key 不是列表类型,返回一个错误;如果命令执行成功,返回插入操作完成之后,列表的新长度;如果没有找到指定元素 ,返回 -1;如果 key 不存在或为空列表,返回 0,语法:LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。语法:LRANGE KEY_NAME START END
4、Set(集合)
Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。sadd 命令:添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
语法:sadd key member
5、zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令,添加元素到集合,元素在集合中存在则更新对应score,语法:zadd key score member