目录
5. Zset(Redis有序集合(sorted set))
Redis数据类型
Redis支持五种数据类型:string(字符串), hash(哈希), list(列表), set(集合)及zset(有序集合)。
1. String
string是Redis最基本的类型,你可以理解成与Memcached( 菜鸟教程 | 百度百科 )一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。一个键最大能存储512MB。
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
代码实例如下:
127.0.0.1:6379> set name "Spring Boot Plus Kotlin" # SET KEY_NAME VALUE
OK
127.0.0.1:6379> get name # GET KEY_NAME
"Spring Boot Plus Kotlin"
在以上实例中我们使用了Redis的set和get命令。键为name,对应的值为"Spring Boot Plus Kotlin"。
2. Hash
Redis中的hash是一个键值(key=>value)对集合。
Redis hash是一个string类型的field和value的映射表,hash适用于存储对象。
代码实例如下:
127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World" # HMGET KEY_NAME FIELD1...FIELDN
OK
127.0.0.1:6379> HGET myhash field1 # HGET KEY_NAME FIELD_NAME
"Hello"
127.0.0.1:6379> HGET myhash field2
"World"
以上实例中hash数据类型存储了包含用户脚本信息的用户对象。实例中我们使用了Redis HMSET, HGETALL命令,user∶1为键值。
每个hash可以存储的键值对为232-1 (= 4,294,967,296)。
3. List
Redis中的list是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
代码实例如下:
127.0.0.1:6379> lpush mylist redis # LPUSH KEY_NAME VALUE1.. VALUEN
(integer) 1
127.0.0.1:6379> lpush mylist springboot
(integer) 2
127.0.0.1:6379> lpush mylist kotlin
(integer) 3
127.0.0.1:6379> lpush mylist kotlin
(integer) 4
127.0.0.1:6379> lpush mylist 0 10 #这里加入mylist中两个元素: 0和10
(integer) 6
127.0.0.1:6379> lrange mylist 0 10 # LRANGE KEY_NAME START END
1) "10"
2) "0"
3) "kotlin"
4) "kotlin"
5) "springboot"
6) "redis"
127.0.0.1:6379>
列表最多可存储的元素为232-1。
4. Set
Redis的set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
使用sadd命令添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,如果key对应的set不存在则返回错误。
向集合添加一个或多个成员命令:
127.0.0.1:6379> sadd myset redis # SADD key member1 [member2]
(integer) 1
127.0.0.1:6379> sadd myset springboot
(integer) 1
127.0.0.1:6379> sadd myset kotlin
(integer) 1
127.0.0.1:6379> sadd myset kotlin # 元素已经在集合中返回0
(integer) 0
获取集合的成员数:
127.0.0.1:6379> scard myset # SCARD key
(integer) 3
返回集合中的所有成员:
127.0.0.1:6379> smembers myset # SMEMBERS key
1) "redis"
2) "kotlin"
3) "springboot"
注意:以上实例中kotlin添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为232-1。
5. Zset(Redis 有序集合(sorted set))
Redis zset和set一样,也是string类型元素的集合,且不允许重复的成员。
zset 和 set不同的是,zset 每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
集合中最大的成员数为232-1。
代码实例如下:
127.0.0.1:6379> zadd mysortedset 1 redis # ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
(integer) 1
127.0.0.1:6379> zadd mysortedset 2 mongodb
(integer) 1
127.0.0.1:6379> zadd mysortedset 3 mysql
(integer) 1
127.0.0.1:6379> zadd mysortedset 4 mysql
(integer) 0
127.0.0.1:6379> zadd mysortedset 5 mysql
(integer) 0ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange mysortedset 0 10 withscores # ZRANGE key start stop [WITHSCORES]
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "5"
在以上实例中我们通过命令ZADD向redis的有序集合中添加了三个值并关联上分数。我们重复添加了MySQL,分数以最后添加的元素为准。