Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String类型
string是Redis最基本的数据类型,一个 key 对应一个 value,string 类型的值最大能存储 512MB。
string 类型是二进制安全的。 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。
序列 | 命令 | 描述 | 案例 |
---|---|---|---|
1 | set key value | 设置指定 key 的值 | set fruit apple |
2 | get key | 获取指定 key 的值。 | get fruit |
3 | mget key1 key2 … keyn | 获取所有(一个或多个)给定 key 的值。 | mget fruit food |
4 | setnx key value | 只有在 key 不存在时设置 key 的值。 | setnx lock 任意字符串 |
5 | strlen key | 返回 key 所储存的字符串值的长度。 | strlen food |
6 | incr key | 将 key 中储存的数字值增一。 | incr money |
7 | decr key | 将 key 中储存的数字值减一。 | decr money |
setnex : 如果key存在,返回0, 如果key不存在,返回1。
实例:
127.0.0.1:6379> setnx drink milk
(integer) 1
127.0.0.1:6379> setnx drink milk
(integer) 0
127.0.0.1:6379>
注意:一个键最大能存储 512MB。
判断一个key是否存在?
- keys *
- get key
- setnx key OK
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
序列 | 命令 | 描述 |
---|---|---|
1 | hdel key field1 field2… fieldn | 删除一个或多个哈希表字段 |
2 | hexist key field | 查看哈希表 key 中,指定的字段是否存在 |
3 | hget key field | 获取存储在哈希表中指定字段的值 |
4 | hgetall key | 获取在哈希表中指定 key 的所有字段和值 |
5 | hincrby key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment |
6 | hkeys key | 获取所有哈希表中的字段(field) |
7 | hlen key | 获取哈希表中字段的数量 |
8 | hmget key field1 field2 | 获取所有给定字段的值 |
9 | hset key field value | 将哈希表 key 中的字段 field 的值设为 value 。 |
10 | hsetnx key field value | 只有在字段 field 不存在时,设置哈希表字段的值。 |
11 | hvals key | 获取哈希表中所有值 |
实例:
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> hset user name "Amy" age "22"
(integer) 2
127.0.0.1:6379> hget user name
"Amy"
127.0.0.1:6379> hget user age
"22"
127.0.0.1:6379>
list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
序列 | 命令 | 描述 |
---|---|---|
1 | llen key | 获取列表长度 |
2 | lpush key value1… value2 | 将一个或多个值插入到列表头部 |
3 | lpop key | 移出并获取列表的第一个元素 |
4 | lrange key start stop | 获取列表指定范围内的元素 |
5 | lrem key count value | 移除列表元素 |
6 | rpush key value1… value2 | 尾部添加 |
7 | rpop key [count] | 尾部移除[count]元素 |
实例:
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> lpush user Amy
(integer) 1
127.0.0.1:6379> lpush user Tom Jack
(integer) 3
127.0.0.1:6379> lrange user 0 5
1) "Jack"
2) "Tom"
3) "Amy"
127.0.0.1:6379>
set(集合)
Redis 的 Set相当于 Java 语言里面的 HashSet, 是 string 类型的无序集合,它内部的键值对是无序的唯一的。这就意味着集合中不能出现重复的数据。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。
序列 | 命令 | 描述 |
---|---|---|
1 | sadd key member1… member2 | 向集合添加一个或多个成员 |
2 | scard key | 获取集合的成员数 |
3 | SMEMBERS key | 返回集合中的所有成员 |
4 | sismember key member | 判断member元素是否是集合key的成员 |
5 | spop key | 移除并返回集合中的一个随机元素 |
实例:
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> sadd user Amy Tom Jack Cindy
(integer) 4
127.0.0.1:6379> scard user
(integer) 4
127.0.0.1:6379> SMEMBERS user
1) "Jack"
2) "Cindy"
3) "Tom"
4) "Amy"
127.0.0.1:6379> sismember user Nancy
(integer) 0
127.0.0.1:6379> sismember user Cindy
(integer) 1
127.0.0.1:6379> spop Tom
(nil)
127.0.0.1:6379> spop user
"Amy"
127.0.0.1:6379> SMEMBERS user
1) "Jack"
2) "Cindy"
3) "Tom"
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部value 的唯一性,不同的是每个value都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
序列 | 命令 | 描述 |
---|---|---|
1 | zadd key score1 member1… score2 member2 | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
2 | zcard key | 获取集合的成员数 |
3 | zcount key min max | 计算在有序集合中指定区间分数的成员数 |
4 | ZRANGEBYSCORE key min max[limit offset count] | 通过字典区间返回有序集合的成员 |
5 | zrem key member1 member2 | 移除有序集合中的一个或多个成员 |
6 | ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 |
7 | zscore key member | 返回有序集中,成员的分数值 |
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> zadd userscore 99 Amy 31 Tom 88 Nancy 98 Cindy
(integer) 4
127.0.0.1:6379> zcard userscore
(integer) 4
127.0.0.1:6379> zcount userscore 31 90
(integer) 2
127.0.0.1:6379> ZRANGEBYSCORE userscore 31 99
1) "Tom"
2) "Nancy"
3) "Cindy"
4) "Amy"
127.0.0.1:6379> ZRANGEBYSCORE userscore 31 90
1) "Tom"
2) "Nancy"
127.0.0.1:6379> zrem userscore Amy Tom
(integer) 2
127.0.0.1:6379> zscore userscore Nancy
"88"
127.0.0.1:6379> ZREMRANGEBYSCORE userscore 80 90
(integer) 1
Redis常用命令
序列 | 命令 | 描述 |
---|---|---|
1 | del key | 删除 key |
2 | exit key | 检查给定 key 是否存在。 |
3 | expire key seconds | 为给定 key 设置过期时间。 |
4 | pexpire key millisenconds | key 的过期时间以毫秒计。 |
5 | keys pattern | 查找所有符合给定模式( pattern)的 key 。 |
6 | ttl key | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 |
7 | type key | 返回 key 所储存的值的类型。 |