redis
redis 的数据结构:
- 字符串 String
- 哈希 Hash : 键值对, map 格式
- 列表 List :可以从列表头部或尾部插入元素
- 集合 Set : 不允许重复元素,无序
- 有序集合 zset : sortedset ,不允许重复元素,且元素有顺序
String (字符串)
String 类型是二进制安全的。
意思是redis
的 String 可以包含任何数据,比如 jpg 图片 或者 序列化的对象
String 类型是 Redis 最基本的数据类型,一个键最大能存储 512 MB
127.0.0.1:6379> set name "redis.net.cn"
OK
127.0.0.1:6379> get name
"redis.net.cn"
127.0.0.1:6379> del name
(integer) 1
以上实例我们使用了Redis 的 SET 和 GET 命令。键为 name
, 对应的值为 redis.net.cn
Hash (哈希)
hash 是一个键值对集合
hash 是一个 String 类型的 filed 和 value 的映射表, hash 特别适合用于存储对象
Redis中每个hash
可以存储 2 ^ (32 - 1) 键值对(40多亿)
127.0.0.1:6379> HMSET user:1 username redis.net.cn password redis.net.cn points 200
OK
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "redis.net.cn"
3) "password"
4) "redis.net.cn"
5) "points"
6) "200"
127.0.0.1:6379> hset user:1 age 18
(integer) 1
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "redis.net.cn"
3) "password"
4) "redis.net.cn"
5) "points"
6) "200"
7) "age"
8) "18"
127.0.0.1:6379> hget user:1 age
"18"
127.0.0.1:6379> hdel user:1 age
(integer) 1
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "redis.net.cn"
3) "password"
4) "redis.net.cn"
5) "points"
6) "200"
以上实例中 hash 数据类型 存储了包含用户脚本信息的 用户对象。
实例中我们使用了 HMSET
,HGETALL
命令,user:1
为键值
List (列表)
列表是简单的字符串列表,按照插入顺序排序。
可以添加一个元素到 列表的头部(左边) 或者 尾部(右边)。
127.0.0.1:6379> lpush redis.net.cn redis
(integer) 1
127.0.0.1:6379> lpush redis.net.cn mongodb
(integer) 2
127.0.0.1:6379> lpush redis.net.cn rabitmq
(integer) 3
127.0.0.1:6379> lrange redis.net.cn 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
127.0.0.1:6379> LRANGE redis.net.cn 0 -1
1) "rabitmq"
2) "mongodb"
3) "redis"
127.0.0.1:6379> rpush redis.net.cn mysql
(integer) 4
127.0.0.1:6379> lrange redis.net.cn 0 -1
1) "rabitmq"
2) "mongodb"
3) "redis"
4) "mysql"
127.0.0.1:6379> lpop redis.net.cn
"rabitmq"
127.0.0.1:6379> lrange redis.net.cn 0 -1
1) "mongodb"
2) "redis"
3) "mysql"
127.0.0.1:6379> rpop redis.net.cn
"mysql"
127.0.0.1:6379> lrange redis.net.cn 0 -1
1) "mongodb"
2) "redis"
列表最多可以存储 2 ^ (32 - 1) 元素(4294967295, 每个列表可存储40多亿)
Set (集合)
Redis的 Set 是 String 类型的无序集合。
集合是通过哈希表实现的,所以添加、查找、删除的复杂度都是 O(1) 。
127.0.0.1:6379> sadd redis.net.cn.2 redis
(integer) 1
127.0.0.1:6379> sadd redis.net.cn.2 mongodb
(integer) 1
127.0.0.1:6379> sadd redis.net.cn.2 rabitmq
(integer) 1
127.0.0.1:6379> sadd redis.net.cn.2 rabitmq
(integer) 0
127.0.0.1:6379> smembers redis.net.cn.2
1) "redis"
2) "rabitmq"
3) "mongodb"
127.0.0.1:6379> srem redis.net.cn.2 rabitmq
(integer) 1
127.0.0.1:6379> smembers redis.net.cn.2
1) "redis"
2) "mongodb"
注意:以上实例中,rabitmq
添加了两次,但是根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 2 ^ (32 - 1) (4294967295, 每个集合可存储40多亿个成员)
zset (sorted set : 有序集合)
zset
和set
一样也是 String 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。
Redis正式通过分数来为集合中的成员进行从小到大的排序。
zset
的成员是唯一的,但分数(score)确实可以重复的。
127.0.0.1:6379> zadd redis.net.cn.3 0 redis
(integer) 1
127.0.0.1:6379> zadd redis.net.cn.3 0 mongodb
(integer) 1
127.0.0.1:6379> zadd redis.net.cn.3 0 rabitmq
(integer) 1
127.0.0.1:6379> zadd redis.net.cn.3 0 rabitmq
(integer) 0
127.0.0.1:6379> zrangebyscore redis.net.cn.3 0 100
1) "mongodb"
2) "rabitmq"
3) "redis"
127.0.0.1:6379> zrange redis.net.cn.3 0 -1
1) "mongodb"
2) "rabitmq"
3) "redis"
127.0.0.1:6379> zrange redis.net.cn.3 0 -1 withscores
1) "mongodb"
2) "0"
3) "rabitmq"
4) "0"
5) "redis"
6) "0"
127.0.0.1:6379> zrem redis.net.cn.3 redis
(integer) 1
127.0.0.1:6379> zrange redis.net.cn.3 0 -1
1) "mongodb"
2) "rabitmq"
127.0.0.1:6379> zrange redis.net.cn.3 0 -1 withscores
1) "mongodb"
2) "0"
3) "rabitmq"
4) "0"
通用命令
-
keys *
: 查询所有键 -
type key
: 获取键对应的value
的类型 -
del key
: 删除指定 key value
网友评论