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的一个属性值。如果要同时设置多个可以使用hmsethget命令也只能一次获取一个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"