Redis 数据类型
Redis支持五种数据类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)。
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
set 指令
set指令用于添加一个string的数据
set key value
get 指令
get指令用于获取一个指定key的string数据
get key
实例
127.0.0.1:6379> set name 'zhangsan'
OK
127.0.0.1:6379> get name
"zhangsan"
Hash(哈希)
- hash 是一个键名对集合。
- hash 是一个string类型的field和value的映射表
- hash特别适合用于存储对象。
- hash 可以存储 2^32 -1 键值对(40多亿)。
hset 指令
hset 指令用于给指定key的hash集合添加一个集合元素。
hset key strname value
hget 指令
hget指令用于获取指定key的hash集合中的一个元素。
hget key name
hmset 指令
hmset指令用于一次添加多个集合元素
hmset key name1 value1 name2 vaule2 ...
hgetall 指令
hgetall指令用于获取指定key的hash中所有的集合元素
实例
127.0.0.1:6379> hset user name zhangsan
(integer) 1
127.0.0.1:6379> hset user age 20
(integer) 1
127.0.0.1:6379> hget user name
"zhangsan"
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "20"
上面的例子中使用了hset
命令设置了一个key为user的hash集合,其中name为zhagnsan,age为20,需要注意的是hset只能一次设置对应key的一个属性值。如果要同时设置多个可以使用hmset
。hget
命令也只能一次获取一个hash集合的一个属性值。如果要获取所有可以使用hgetall
。
127.0.0.1:6379> hmset pet name xiaobai type dog
OK
127.0.0.1:6379> hgetall pet
1) "name"
2) "xiaobai"
3) "type"
4) "dog"
127.0.0.1:6379>
List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。
- 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
lpush指令
lpush指令向列表头部插入数据
lpush key value
rpush指令
rpush指令向李彪尾部插入数据
rpush key value
lrange指令
lrang指令查找指定范围的数据
lrange key start end
实例
127.0.0.1:6379> lpush name zhangsan
(integer) 1
127.0.0.1:6379> lpush name lisi
(integer) 2
127.0.0.1:6379> lpush name wangwu
(integer) 3
127.0.0.1:6379> lrange name 0 10
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379>
Set(集合)
- Redis的Set是string类型的无序集合。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 集合内元素具有唯一性,第二次插入的元素将被忽略
- 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)
sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误。
sadd key member
smembers 指令
semebers 指令用于读取set集合元素
smembers key
实例
127.0.0.1:6379> sadd pet dog
(integer) 1
127.0.0.1:6379> sadd pet cat
(integer) 1
127.0.0.1:6379> sadd pet fish
(integer) 1
127.0.0.1:6379> smembers pet
1) "fish"
2) "cat"
3) "dog"
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
zrangebyscore 指令
读取指定范围的数据
zrangebyscore key start end
实例
127.0.0.1:6379> zadd fruit 0 app
(integer) 1
127.0.0.1:6379> zadd fruit 0 bana
(integer) 1
127.0.0.1:6379> zadd fruit 0 waterm
(integer) 1
127.0.0.1:6379> zrangebyscore fruit 0 100
1) "app"
2) "bana"
3) "waterm"