Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512
兆字节的任何内容
示例:
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> get name "zhangsan" 127.0.0.1:6379> get age "20" 127.0.0.1:6379> keys * 1) "age" 2) "name" 127.0.0.1:6379> • 在上面的示例中,`set`和`get`是Redis命令,`name`是Redis中使用的键,`yiibai.com`是存储在Redis中的字符串的值.注 - Redis命令不区分大小写,如
SET
,Set
和set
都是同一个命令。字符串值的最大长度为 512MB针对字符串,还有其他命令:
append key value #如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾 #如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样incr key #将 key 中储存的数字值增一。 #如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 #如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 #本操作的值限制在 64 位(bit)有符号数字表示之内incrby key increment #将 key 所储存的值加上增量 increment 。 #如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。 #如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 #本操作的值限制在 64 位(bit)有符号数字表示之内mset key value [key value ...] #同时设置一个或多个 key-value 对。 #如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 msetnx 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。 #mset 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。setex key seconds value #将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。 #如果 key 已经存在, setex 命令将覆写旧值setnx key value #将 key 的值设为 value ,当且仅当 key 不存在。 #若给定的 key 已经存在,则 SETNX 不做任何动作setrange key offset value #用来替换子字符串 #用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。 #不存在的 key 当作空白字符串处理strlen key #返回 key 所储存的字符串值的长度。 #当 key 储存的不是字符串值时,返回一个错误
Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。
示例:
127.0.0.1:6379> hset user loginname zhangsan #设置user对象的loginname属性的值为zhangsan (integer) 1 #如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 127.0.0.1:6379> hget user loginname #获取用户user对象的loginname属性的值 "zhangsan" 127.0.0.1:6379> hset user loginname lisi #再次设定user对象的loginname属性的值为lisi (integer) 0 #如果哈希表中的域 field 已经存在且旧值已被新值覆盖,返回 0 127.0.0.1:6379> hget user loginname #再次获取user对象的loginname属性的值 "lisi" 127.0.0.1:6379>hmset key field value [field value ...] #同时将多个 field-value (域-值)对设置到哈希表 key 中。 #此命令会覆盖哈希表中已存在的域。 #如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作hmget key field [field ...] #返回哈希表 key 中,一个或多个给定域的值。 #如果给定的域不存在于哈希表,那么返回一个 nil 值。 #因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表hlen key #返回哈希表 key 中域的数量hkeys key #返回哈希表 key 中的所有域。hincrby key field increment #为哈希表 key 中的域 field 的值加上增量 increment 。 #增量也可以为负数,相当于对给定域进行减法操作。 #如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。 #如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 #对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。 #本操作的值被限制在 64 位(bit)有符号数字表示之内hgetall key #返回哈希表 key 中,所有的域和值。 #在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍hexists key field #查看哈希表 key 中,给定域 field 是否存在hdel key field [field ...] #删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略hvals key #返回哈希表 key 中所有域的值
Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素
127.0.0.1:6379> lpush subject java html5 android ios #从左到右的顺序在subject中依次插入四个元素到subject的表头部分 (integer) 4 #返回subject 列表的长度 127.0.0.1:6379> llen subject # 返回列表 subject 的长度 (integer) 4 127.0.0.1:6379> lpop subject #移除并返回列表 subject 的头元素 "ios" 127.0.0.1:6379> llen subject #再次获取列表subject 的长度 (integer) 3 #弹出一个元素后,subject里面只剩下三个元素 127.0.0.1:6379> lrange subject 0 -1 #返回列表 key 中指定区间内的元素,0表示从收元素开始,-1表示最后一个元素 1) "android" 2) "html5" 3) "java" 127.0.0.1:6379>列表的最大长度为
2^32 - 1
个元素(4294967295
,每个列表可容纳超过40
亿个元素)。rpush key value [value ...] #将一个或多个值 value 插入到列表 key 的表尾(最右边)。 #如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。 #如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。 #当 key 存在但不是列表类型时,返回一个错误rpop key #移除并返回列表 key 的尾元素。lindex key index #返回列表 key 中,下标为 index 的元素。 #下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 #你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 #如果 key 不是列表类型,返回一个错误。linsert key BEFORE|AFTER pivot value #将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。 #当 pivot 不存在于列表 key 时,不执行任何操作。 #当 key 不存在时, key 被视为空列表,不执行任何操作。 #如果 key 不是列表类型,返回一个错误。lrem key count value #根据参数 count 的值,移除列表中与参数 value 相等的元素。 #count 的值可以是以下几种: #count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 #count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 #count = 0 : 移除表中所有与 value 相等的值
Redis集合是字符串的无序集合
示例:
127.0.0.1:6379> sadd student zhangsan lisi wangwu #多个元素(名字)加入到集合 student 当中 (integer) 3 #被添加到集合中的新元素的数量,不包括被忽略的元素 127.0.0.1:6379> scard student # 返回集合 student 的基数(集合中元素的数量) (integer) 3 127.0.0.1:6379> smembers student #返回集合 student 中的所有成员 1) "wangwu" 2) "lisi" 3) "zhangsan" 127.0.0.1:6379> spop student # 移除并返回集合中的一个随机元素 "wangwu" 127.0.0.1:6379> scard student #移除之后再看集合student的长度 (integer) 2 127.0.0.1:6379> smembers student #移除之后再观察集合student的所有元素 1) "lisi" 2) "zhangsan" 127.0.0.1:6379>sdiff key [key ...] #返回一个集合的全部成员,该集合是所有给定集合之间的差集。 #不存在的 key 被视为空集sinter key [key ...] #返回一个集合的全部成员,该集合是所有给定集合的交集。 #不存在的 key 被视为空集。 #当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)sismember key member #判断 member 元素是否集合 key 的成员srem key member [member ...] #移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 #当 key 不是集合类型,返回一个错误sunion key [key ...] #返回一个集合的全部成员,该集合是所有给定集合的并集。 #不存在的 key 被视为空集。
Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复
示例:
# 将一个元素(java)及其 score 值(5)加入到有序集 language 当中 127.0.0.1:6379> zadd language 5 java (integer) 1 #将多个元素(ios,android,html5,sql)及其score值(7,3,8,10)加入到有序集language中 127.0.0.1:6379> zadd language 7 ios 3 android 8 html5 10 sql (integer) 4 #共添加成功4条数据 #返回有序集 language 的基数(成员的数量) 127.0.0.1:6379> zcard language (integer) 5 #返回有序集 lanuage 中, score 值在 2 和 6 之间(默认包括 score 值等于 2 或 6 )的成员的数量 127.0.0.1:6379> zcount language 2 6 (integer) 2 #返回有序集 lanuage 中,指定区间内的成员,并按score从小到大排序 127.0.0.1:6379> zrange language 0 -1 withscores 1) "android" 2) "3" 3) "java" 4) "5" 5) "ios" 6) "7" 7) "html5" 8) "8" 9) "sql" 10) "10" #返回有序集 language 中,成员 java 的 score 值 127.0.0.1:6379> zscore language java "5" 127.0.0.1:6379>
del key [key ...] #删除给定的一个或多个 keyexists key #检查给定 key 是否存在expire key seconds #为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除keys pattern #查找所有符合给定模式 pattern 的 key 。 #KEYS * 匹配数据库中所有 key 。 #KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 #KEYS h*llo 匹配 hllo 和 heeeeello 等。 #KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillotype key #返回 key 所储存的值的类型