Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有 序集合),接下来我们一一介绍这五种数据类型
字符串(String):
1.string是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
2.string类型是二进制安全的。意思是Redis的string可以包含任何数据。比如jpg图片或者序列化的对象
3.string类型是Redis最基本的数据类型,一个键最大能存储512MB
字符串的基本操作:
设置键的值 set k1 "hello world"
查看键的值 get k1
删除键 del k1
查看所有的键 keys *
向键中追加值 append k1 123对键的指定范围查询 getrange k1 0 2
查看键的长度 strlen k1127.0.0.1:6379> set k1 "hello world" OK 127.0.0.1:6379> get k1 "hello world" 127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> get k1 (nil) 127.0.0.1:6379> getrange k1 0 2 "" 127.0.0.1:6379> set k1 "hello world" OK 127.0.0.1:6379> getrange k1 0 2 "hel" 127.0.0.1:6379> 127.0.0.1:6379> set k1 "hello world" OK 127.0.0.1:6379> get k1 "hello world" 127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set k1 "hello world" OK 127.0.0.1:6379> append k1 123 (integer) 14 127.0.0.1:6379> get k1 "hello world123" 127.0.0.1:6379> getrange k1 0 2 "hel" 127.0.0.1:6379> strlen k1 (integer) 14
添加1(该键的值只能为数字) incr k
减少1 decr k
添加15 incrby k 15
减少3 decrby k 3127.0.0.1:6379> set k 10 OK 127.0.0.1:6379> incr k (integer) 11 127.0.0.1:6379> get k "11" 127.0.0.1:6379> decr k (integer) 10 127.0.0.1:6379> get k "10" 127.0.0.1:6379> incrby k 15 (integer) 25 127.0.0.1:6379> get k "25" 127.0.0.1:6379> decrby k 3 (integer) 22 127.0.0.1:6379> get k "22"
集合(Set)
1.是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,会自动去重
2.集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
3.集合中最大的成员数为2的(32 - 1)次方(4294967295,每个集合可存储40多亿个成员)
集合的基本操作:
sadd 添加
smembers 查询集合元素
sismember 查询集合中是否存在某元素 1存在 0不存在
scard 获取集合的长度
spop 删除集合的某个元素(随机)
srem 删除集合的某个元素(指定)
srandmember 随机查询集合中的某元素 最后一个参数的查询的个数127.0.0.1:6379> sadd arr 1 2 3 4 5 6 7 8 (integer) 8 127.0.0.1:6379> smembers arr 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" 127.0.0.1:6379> sismember arr 9 (integer) 0 127.0.0.1:6379> sismember arr 1 (integer) 1 127.0.0.1:6379> scard arr (integer) 8 127.0.0.1:6379> spop arr "4" 127.0.0.1:6379> srem arr 1 (integer) 1 127.0.0.1:6379> scard arr (integer) 6 127.0.0.1:6379> srandmember arr 1 1) "2"
列表(List)
1.Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
2.列表最多可存储 2的(32-1)次方个元素(4294967295,每个列表可存储40多亿)
列表的基本操作:
lpush 将一个或多个值插入到到列表左边
rpush 将一个或多个值插入到到列表右边
lrange 查询列表中的元素 0 -1 查询全部
lindex 根据索引查询值 从0开始 最右边是-1
lpop 删除左边第一个元素
rpop 删除右边第一个元素
llen 查询列表的长度127.0.0.1:6379> lpush a 1 2 3 4 (integer) 4 127.0.0.1:6379> rpush a 1 2 3 4 (integer) 8 127.0.0.1:6379> lrange a 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 5) "1" 6) "2" 7) "3" 8) "4" 127.0.0.1:6379> lindex a 1 "3" 127.0.0.1:6379> lindex a 5 "2" 127.0.0.1:6379> lpop a "4" 127.0.0.1:6379> lrange a 0 -1 1) "3" 2) "2" 3) "1" 4) "1" 5) "2" 6) "3" 7) "4" 127.0.0.1:6379> rpop a "4" 127.0.0.1:6379> lrange a 0 -1 1) "3" 2) "2" 3) "1" 4) "1" 5) "2" 6) "3" 127.0.0.1:6379> llen a (integer) 6
哈希(Map)
1.Redis hash是一个键值对集合
2.Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
3.每个hash可以存储2的(32 - 1)次方个键值对(40多亿)
哈希的基本操作:
hset 添加哈希
hget 查看指定key
hmset 添加多个键值对
hmget 获取多个键值对
hgetall 查看哈希中的所有键值
hdel 删除指定键
hlen 长度
hexists 是否存在某键 0不存在 1存在
hkeys 获取属性的所有key
hvals 获取属性的所有value127.0.0.1:6379> hset stu id 1001 age 18 (integer) 2 127.0.0.1:6379> hget stu id "1001" 127.0.0.1:6379> hmset stu name leq sex 0 OK 127.0.0.1:6379> hmget stu id age 1) "1001" 2) "18" 127.0.0.1:6379> hgetall stu 1) "id" 2) "1001" 3) "age" 4) "18" 5) "name" 6) "leq" 7) "sex" 8) "0" 127.0.0.1:6379> hlen stu (integer) 4 127.0.0.1:6379> hexists stu id (integer) 1 127.0.0.1:6379> hexists stu id1 (integer) 0 127.0.0.1:6379> hkeys stu 1) "id" 2) "age" 3) "name" 4) "sex" 127.0.0.1:6379> hvals stu 1) "1001" 2) "18" 3) "leq" 4) "0" 127.0.0.1:6379> hdel stu id (integer) 1 127.0.0.1:6379> hgetall stu 1) "age" 2) "18" 3) "name" 4) "leq" 5) "sex" 6) "0"
有序集合(Ordered Sets)
1.元素不能重复
2.给每一个key分配了一个double类型的权重
3.根据这个数字来对元素进行排序
4.集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。 集合中最大的成员数为2的(32 - 1)次方 (4294967295,每个集合可存储40多亿个成员)
有序集合的基本操作:
zadd 添加有序集合
zrange 查询有序集合
zrange myzset 0 -1 withscores 输出权重
zrangebyscore myzset 20 40 权重20-40
zrangebyscore myzset 20 (40 权重20-40 小于40
zrem myzset game5 删除指定元素
zcard myzset 计算集合中元素的数量
zcount myzset 20 30 计算有序集合指定分数区间的成员数量127.0.0.1:6379> zadd myzset 10 game1 20 game2 30 game3 40 game4 50 game5 (integer) 5 127.0.0.1:6379> zrange myzset 0 -1 1) "game1" 2) "game2" 3) "game3" 4) "game4" 5) "game5" 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "game1" 2) "10" 3) "game2" 4) "20" 5) "game3" 6) "30" 7) "game4" 8) "40" 9) "game5" 10) "50" 127.0.0.1:6379> zrangebyscore myzset 20 40 1) "game2" 2) "game3" 3) "game4" 127.0.0.1:6379> zrangebyscore myzset 20 (40 1) "game2" 2) "game3" 127.0.0.1:6379> zrem myzset game5 (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "game1" 2) "10" 3) "game2" 4) "20" 5) "game3" 6) "30" 7) "game4" 8) "40" 127.0.0.1:6379> zcard myzset (integer) 4 127.0.0.1:6379> zcount myzset 20 30 (integer) 2
数据类型小总结
string (字符串)一个key对应一个value,字符串类型
hash (哈希)一个对应一个value,value是一个Map结构的类型 (适合对象的保存)
list(列表)一个key对应多个value,这个value里保存多个string类型的值,有序的并可以重复
set (集合)一个key对应多个value,这个value中中保存多个string类型的值,无序并不可重复
zset(sorted set:有序集合)一个key对应多个value每一个value分配了一个score分数,按照这个分数有序排序,小的在前大的在后。