redis作为一个性能优越的键值(key-value)型数据库,支持多种数据结构。有strings–list–set–sorts set–hash几种。有必要了解常用操作。
strings
Strings:字符串是二进制安全的,这意味着一个一个redis的字符串能包含任意类型的数据,比如:JPEG格式的图片或者一个序列化的数组或对象。一个字符串最多512M内容。
SET key value [EX #] [NX|XX] //设定键-值。NX表示键不存在才设定值。如果存在则不设定。XX相反。EX后加过期时间。还有PX类型,毫秒。
GET
INCR //加或减key中的数字,只能对整数操作。
DECR
EXIST
SETEX key seconds value
将值value关联到key,并将 key 的生存时间设 为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。
返回值: 设置成功时返回 OK 。 当 seconds 参数不合法时,返回一个错误。
SETRANGE key offset value
用 value 参数覆写(overwrite)给定 key 所储存的 字符串值,从偏移量 offset 开始。 不存在的 key 当作空白字符串处理。
- 返回值: 被 SETRANGE 修改之后,字符串的长度。
MSET key value [key value ...]
同时设置一个或多个 key-value 对。 如果某个给定 key 已经存在,那么 MSET 会用新 值覆盖原来的旧值,如果这不是你所希望的效果, 请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
- 返回值: 总是返回 OK (因为 MSET 不可能失败)
GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取范 围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。 负数偏移量表示从字符串最后开始计数, -1 表示 最后一个字符, -2 表示倒数第二个,以此类推。
- 返回值: 截取得出的子字符串。
APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
- 返回值: 追加 value 之后, key 中字符串的长度
lists
Lists:键指向一个容器。可以在左右进行添加字串,主要功能是push.pop.获取一个范围的所有值,等等。list可当成是lists或是栈。
LPUSH //`LPUSH SS MON ` 定义了一个list,或者左侧增加值。 返回list的长度。
RPUSH //这是右侧增加值,上面是右侧增加。
LPOP //左弹。返回的是被弹出的元素。弹完就没了。不存在则返会null。
RPOP //右弹。
LINDEX
LSET //LSET key index value将列表 key 下标为 index 的元素的值设置为 value 。 当 index 参数超出范围,或对一个空列表( key 不 存在)进行 LSET 时,返回一个错误。 返回值:操作成功返回OK,否则返回错误信息。
LINSERT //LINSERT key BEFORE|AFTER pivot value 将值value插入到列表key中, 位于值 pivot 之前或之 后。 当 pivot 不存在于列表 key 时,不执行任何操作。 当 key 不存在时, key 被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。
返回值:
如果命令执行成功,返回插入操作完成之后,列表 的长度。 如果没有找到 pivot ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。
LTRIM //LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区 间内的元素,不在指定区间之内的元素都将被删除。 下标(index)参数 start 和 stop 都以 0 为底,也就是说, 以 0 表示列表的第一个元素,以 1 表示列表的第二个元素 ,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素, 以此类推。当 key 不是列表类型时,返回一个错误。
返回值: 命令执行成功时,返回 ok 。
RPOPLPUSH //RPOPLPUSH source destination 命令 RPOPLPUSH 在一个原子时间内,执行两个动作:1 将列表 source 中的最后一个元素(尾元素)弹出,并返回给 客户端。2.将 source 弹出的元素插入到列表 destination , 作为 destination 列表的的头元素。 如果 source 不存在,值 nil 被返回,并且不执行其他动作。 如果 source 和 destination 相同,则列表中的表尾元素 被移动到表头,并返回该元素,可以把这种特殊情况视作 列表的旋转(rotation)操作。
返回值: 被弹出的元素。
sets
Sets:最多40亿元素。
SADD //创建新的集合。`SADD w1 xxx xxx xx`。也可添加新的元素,重复元素会被忽略。返回被添加到集合中的新元素的数量,不包括被忽略的元素。
SINTER //插入。
SUNION //SUNION key [key] 返回一个集合的全部成员的列表。
SPOP //随机弹出。如果不弹出只是查看的话,使用SRANDMEMBER命令。返回值:被移除的随机元素。或是空。
SISMEMBER //查看某一元素在不在列表中。
SINTER //求交集。
SDIFF//SDIFF key [key] 返回一个集合的全部成员,该集合是所有给定集合之间的差积。返回值:一个包含差积成员的列表。
SMOVE sources destination member 将member元素从source集合移动到destination集合。源集合没有的元素不执行操作,否则执行。源和目的都有该元素,则源会被移除。元素不存在返回错误。成功返回1,如果不是source的元素则返回0.
sorted sets
Sorted Sets: //有序集合。
ZADD //定义或增加引索。ZADD key score member [[score member] [score member] ...]
ZRANGE //指明起始和结束索引。
ZCARD //定义
ZRANK //ZRANK key member 返回成员的排名。其中有序集成员按照score值递增以排名为0。使用ZREVRANK命令可以获得成员按score值递减(从大到小)排列的排名。排名以 0 为底,也就是说, score 值最小的成员排名 为 0 。使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。
返回值:如果member是有序集key的成员,返返回 member 的 排名。 如果 member 不是有序集 key 的成员,返回nil
ZINCRBY //ZINCRBY key increment member 为集合 key 的成员member的score 值加上增量 increment 。可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member , 就是让 member 的 score 值减去 5 。 当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。
当key不是有序集类型时,返回一个错误。score值可以是整数值或双精度浮点数。
返回值:member成员的新score值,以字符串形式表示。
ZREMRANGEBYRANK key start stop //移除有序集 key 中,指定排名(rank)区间内的所有成员。 区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表 示有序集第一个成员,以 1 表示有序集第二个成员,以此 类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表 示倒数第二个成员,以此类推。 返回值: 被移除成员的数量。
ZADD weekday1 1 mon 2 tue 3 web //定义一个有序集合。或者添加。或者更新集合。返回被成功添加的新成员的数量,不包括被更新的,已存在的成员。
ZRANGE weekday1 //返回 integer 3
ZRANGE weekday1 tue //返回 integer 1
ZSCORE weekday1 1 //根据元素返回SCORE.
hash
Hash:关联数组,2.0引入。Redis hash是一个string类型的field和valu e的映射表。 它的添加、 删除操作都是0(1)( 平均)。 hash特别适合用于存储对象。 相较 于将对象的每个字段存成单个string类型。 将一个对象存储在hash类型中会占用更少的 内存, 并且可以更方便的存取整个对象。
HSET //HSET key field value 将哈希表 key 中的域 field 的值设为 value 。 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。 如果域 field 已经存在于哈希表中,旧值将被覆盖。
返回值: 如果 field 是哈希表中的一个新建域,并且值 设置成功,返回 1 。 如果哈希表中域 field 已经存在且旧值已被新 值覆盖,返回 0 。
HMSET //HMSET key field value [field value ...] 同时将多个 field-value (域-值)对设置到哈希表 key 中。 此命令会覆盖哈希表中已存在的域。 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。
返回值: 如果命令执行成功,返回 OK 。 当 key 不是哈希表(hash)类型时,返回一个错误。
HINCRBY //HINCRBY key field increment 为哈希表 key 中的域 field 的值加上增量 increment 。 增量也可以为负数,相当于对给定域进行减法操作。 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。 如果域 field 不存在,那么在执行命令前,域的值被初始 化为 0 。 对一个储存字符串值的域 field 执行 HINCRBY 命令将造 成一个错误。
返回值: 执行 HINCRBY 命令之后,哈希表 key 中域 field 的值
HMGET //HMGET key field [field ...] 返回哈希表 key 中,一个或多个给定域的值。 如果给定的域不存在于哈希表,那么返回一个 nil 值。
返回值:一个包含多个给定域的关联值的表,表值的排列顺序和给定参数的请求顺序一样。
HSETNX //
HGET //取值
HKEYS // 返回哈希表Key中的所有域。
返回值:一个包含哈希表中所有域的表。 当key不存在时,返回一个空表。
HVALS //
HDEL //删除
hash h1 a mon //增加键值
hash h1 b tue