Redis数据类型

Redis支持五种数据类型:string(字符串)hash(哈希),list(列表)set(集合)zset(sorted set)有序集合

string(字符串)

string 是redis最基本的类型,一个key对应一个value。
一个键最大能存储512MB

# 进入redis 客户端命令行
xiaobeideMacBook-Pro:redis-5.0.5 xiaobei$ pwd
/usr/local/redis-5.0.5
xiaobeideMacBook-Pro:redis-5.0.5 xiaobei$ src/redis-cli 
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
# 查询所有的key
127.0.0.1:6379> keys *
(empty list or set)
# 设置一个key
127.0.0.1:6379> set str "hello world!"
OK
# 获取key str的值
127.0.0.1:6379> get str
"hello world!"

hash哈希

redis hash 是一个键值对集合,是一个string类型的field和value映射表,hash特别适合用于存储对象。每个hash可以存储
2^(32-1)键值对(40多亿)。

# 新新一个 hmset 保存用户信息
127.0.0.1:6379> hmset user username zhangsan age 18 email 18788888888@gamil.com phone 18788888888
OK
# 获取某一个属性值
127.0.0.1:6379> hmget user username
1) "zhangsan"
# 获取所有键值对 
127.0.0.1:6379> hgetall user
1) "username"
2) "zhangsan"
3) "age"
4) "18"
5) "email"
6) "18788888888@gamil.com"
7) "phone"
8) "18788888888"

list(列表)

redis 列表是最简单的字符串列表,按照插入顺序排序。可以添加一个元素,从列表的头部(左边)或者尾部(右边)。每个list可以存储2^(32-1)元素(40多亿)。

# 从左边(尾部) 一次插入三个值
127.0.0.1:6379> lpush dbs Redis Mysql Oracle
(integer) 3
# 输出0-10个值 
127.0.0.1:6379> lrange dbs 0 10
1) "Oracle"
2) "Mysql"
3) "Redis"
# 从右边(头部)插入一个值
127.0.0.1:6379> rpush dbs SQLServer
(integer) 4
# 输出
127.0.0.1:6379> lrange dbs 0 10
1) "Oracle"
2) "Mysql"
3) "Redis"
4) "SQLServer"

Set(集合)

Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd命令

添加一个string元素到key对应的set集合中,成功返回1,如果元素以及在集合中存在返回0,key对应的set不存在返回错误。
每个Set最多可以存储2^(32-1)元成员(40多亿)。

127.0.0.1:6379> sadd languages java
(integer) 1
# 添加两个java 第二个没有成功
127.0.0.1:6379> sadd languages java
(integer) 0
127.0.0.1:6379> sadd languages js
(integer) 1
127.0.0.1:6379> sadd languages python
(integer) 1
127.0.0.1:6379> sadd languages c++
(integer) 1
127.0.0.1:6379> smembers languages
1) "c++"
2) "python"
3) "js"
4) "java"

zset(有序集合)

Redis的zset和set一样也是string类型的元素集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大排序的。zset的成员是唯一的,但分数(score)却可以重复。

zadd命令

添加元素到集合,元素在集合中存在则更新对应的score。

    zadd key score member

测试

127.0.0.1:6379> zadd chars 0 a
(integer) 1
127.0.0.1:6379> zadd chars 0.12 b
(integer) 1
127.0.0.1:6379> zadd chars 0.02 c
(integer) 1
127.0.0.1:6379> zadd chars 0.38 d
(integer) 1
127.0.0.1:6379> zadd chars 4.38 e
(integer) 1
127.0.0.1:6379> zrangebyscore chars 0 10
# 按照score 大小 排序
1) "a"
2) "c"
3) "b"
4) "d"
5) "e"