Redis类型及相关命令行
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
1.set key value(设置值)
Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
redis 127.0.0.1:6379> SET key "value"
OK
2.get key(通过key获取对应的值)
Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 null。如果key 储存的值不是字符串类型,返回一个错误(“WRONGTYPE Operation against a key holding the wrong kind of value”)。
redis> GET key ## key存在时并且是字符串类型
"value"
redis> GET key ## key不存在
(nil)
redis> GET key ## key存在时但不是字符串类型
(error) ERR Operation against a key holding the wrong kind of value
3.getrange key start end(获取子字符串)
Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"
redis 127.0.0.1:6379> GETRANGE mykey 0 -2
"This is my test ke"
redis 127.0.0.1:6379> GETRANGE mykey 18 -1
"y"
4.getset key value(替换值)
Redis Getset 命令用于设置指定 key 的值,并返回 key 的旧值。
redis> getset db mongodb # 没有旧值,返回 nil
(nil)
redis> get db
"mongodb"
redis> getset db redis # 返回旧值 mongodb
"mongodb"
redis> get db
"redis"
5.mget key1 [key2…](获取所有(一个或多个)给定 key 的值。)
Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
redis 127.0.0.1:6379> set key1 "hello"
OK
redis 127.0.0.1:6379> set key2 "world"
OK
redis 127.0.0.1:6379> mget key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)
6 setex key seconds value(将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。)
Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
redis 127.0.0.1:6379> setex mykey 60 redis
OK
redis 127.0.0.1:6379> ttl mykey #查询剩余时间
60
redis 127.0.0.1:6379> get mykey
"redis
7.setnx key value(只有在 key 不存在时设置 key 的值)
Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
返回值
设置成功,返回 1 。 设置失败,返回 0 。
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
Hash(哈希)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
1.hset key field value(单个设置值)
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,旧值将被覆盖。
2.hmset key field1 value1 field2 value2 (同时将多个 field-value (域-值)对设置到哈希表 key 中。)
Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
此命令会覆盖哈希表中已存在的字段。
如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
3.hsetnx key field value(只有在字段 field 不存在时,设置哈希表字段的值)
Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,操作无效。
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
4.hget key field(获取存储在哈希表中指定字段的值)
Redis Hget 命令用于返回哈希表中指定字段的值。
# 字段存在
redis> HSET site redis redis.com
(integer) 1
redis> HGET site redis
"redis.com"
# 字段不存在
redis> HGET site mysql
(nil)
5.hgetall key(获取在哈希表中指定 key 的所有字段和值)
Redis Hgetall 命令用于返回哈希表中,所有的字段和值。
在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
1. lpush key value1…(将一个或多个值插入到列表头部)
Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
**注意:**在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。
127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"
2.lpushx key value(将一个值插入到已存在的列表头部)
Redis Lpushx 将一个值插入到已存在的列表头部,列表不存在时操作无效。
127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSHX list1 "bar"
(integer) 2
127.0.0.1:6379> LPUSHX list2 "bar"
(integer) 0
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"
3.lindex key index(通过索引获取列表中的元素)
Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
redis 127.0.0.1:6379> LPUSH mylist "World"
(integer) 1
redis 127.0.0.1:6379> LPUSH mylist "Hello"
(integer) 2
redis 127.0.0.1:6379> LINDEX mylist 0
"Hello"
redis 127.0.0.1:6379> LINDEX mylist -1
"World"
redis 127.0.0.1:6379> LINDEX mylist 3 # index不在 mylist 的区间范围内
(nil)
4. lrange key start stop(获取列表指定范围内的元素)
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LRANGE mylist 0 0
1) "one"
redis> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
redis> LRANGE mylist 5 10
(empty list or set)