Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)zset(sorted set:有序集合)
string
- 最基本的类型,一个 key 对应一个 value。
- 是二进制安全的。意思是 redis 的 string 可以包含任何数据。如jpg图片或者序列化的对象。
- string 类型的值最大能存储 512MB
127.0.0.1:6379> set book "C++ and C和指针"
OK
127.0.0.1:6379> get book
"C++ and C\xe5\x92\x8c\xe6\x8c\x87\xe9\x92\x88"
127.0.0.1:6379>
hash
- Redis hash 是一个键值(key=>value)对集合。
- Redis hash 是一个 string 类型的区域内存 和 value 的映射表,hash 特别适合用于存储对象
127.0.0.1:6379> HMSET name 1 "liusenlin" 2 "xiaoming"
OK
127.0.0.1:6379> HGET name
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> HGET name 1
"liusenlin"
127.0.0.1:6379> HGET name 2
"xiaoming"
127.0.0.1:6379>
HMSET, HGET 命令,HMSET 设置了两个 kay=>value 对, HGET 获取对应 key 对应的 value。
每个 hash 可以存储 2的32次方 -1 键值对(40多亿)。
list
- 字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部 、尾部
列表最多可存储 2的32次方 - 1 元素 (4294967295, 每个列表可存储40多亿)
127.0.0.1:6379> LPUSH list1 1234
(integer) 1
127.0.0.1:6379> LPUSH list1 56789
(integer) 2
127.0.0.1:6379> LPUSH list1 good
(integer) 3
127.0.0.1:6379> LRANGE list1 0 3
1) "good"
2) "56789"
3) "1234"
set
是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
集合中最大的成员数为 2的32次方 - 1(4294967295, 每个集合可存储40多亿)
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0
127.0.0.1:6379> SADD set1 redis
(integer) 1
127.0.0.1:6379> SADD set1 mysql
(integer) 1
127.0.0.1:6379> SADD set1 postgres
(integer) 1
127.0.0.1:6379> SADD set1 nginx
(integer) 1
127.0.0.1:6379> SADD set1 docker
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "nginx"
2) "postgres"
3) "mysql"
4) "redis"
5) "docker"
127.0.0.1:6379> SADD set1 nginx
(integer) 0
127.0.0.1:6379>
zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复
127.0.0.1:6379>
127.0.0.1:6379> ZADD vehicle 1 car1
(integer) 1
127.0.0.1:6379> ZADD vehicle 5 car2
(integer) 1
127.0.0.1:6379> ZADD vehicle 2 car3
(integer) 1
127.0.0.1:6379> ZADD vehicle 3 car4
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE vehicle
(error) ERR wrong number of arguments for 'zrangebyscore' command
127.0.0.1:6379> ZRANGEBYSCORE vehicle 0 2
1) "car1"
2) "car3"
127.0.0.1:6379> ZRANGEBYSCORE vehicle 0 5
1) "car1"
2) "car3"
3) "car4"
4) "car2"
127.0.0.1:6379> ZRANGEBYSCORE vehicle 0 6
1) "car1"
2) "car3"
3) "car4"
4) "car2"
127.0.0.1:6379>
注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。
每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,
127.0.0.1:6379[15]> SELECT 0
OK
127.0.0.1:6379> SELECT 15
OK
127.0.0.1:6379[15]>
与一般数据库区别:
1.Redis不支持自定义数据库的名字,每个数据库都以编号命名,
2.Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。