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"