声明:本篇文章参考于该作者的# Redis从入门到精通:中级篇,大家有兴趣,去关注一下。
String(字符串)是Redis中最简单的一种数据结构,和MemCache数据结构是一样的,即Key-Value型的数据,根据Redis官方文档,Value最大值为512M。
> set k1 hello OK > get k1 hello
> set k2 5 OK > get k2 5 #自增1操作 > incr k2 6 #减4操作 > decrby k2 4 2 > get k2 2
> set k3 10.2 OK > get k3 10.2 > incr k3 ERR value is not an integer or out of range > decrby k3 2 ERR value is not an integer or out of range
当value的类型为float类型的时候,incr和decrby是不行的。
> get k1 hello
> del k1 1 > get k1 null
说明:
> lpush l1 12 1 > lpush l1 13 2 > lpush l1 14 3 > lpush l1 15 4 > lpush l2 12 13 14 15 4
#移除列表的第一个元素,最后插入的元素 > lpop l1 15 #移除列表的最后一个元素,第一个插入的元素 > rpop l1 12
再取数据的时候,我们就会发现,我们插入数据的时候,顺序是:12、13、14、15,取出数据的时候,就变成了15、14、13、12 ,说明List是按照先进后出的原则。(类似于队列)
> lpush l2 12 1 > lpush l2 13 2 > lpush l2 14 3 > llen l2 3 > lindex l2 0 14 > lrange l2 0 3 14 13 12
> lpush l3 12 1 > lpush l3 13 2 > lpush l3 13 3 > llen l3 3
我们通过查看List的长度可以知道,是可以存储相同的值的
redis支持value值为集合(SET),Redis 中的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
> sadd set1 12 1 > sadd set1 13 1 > sadd set1 14 1 > sadd set2 13 14 15 3
> sadd set1 12 1 > sadd set1 13 1 > sadd set1 14 1 > scard set1 3
> smembers set2 13 14 15
存在的时候,返回1,不存在的时候就为0
> sismember set1 13 1 > sismember set1 10 0
> srem set1 13 1 > sismember set1 13 0
> sadd set1 12 1 > sadd set1 13 1 > sadd set1 14 1 > sadd set1 13 0 > scard set1 3
我们一共存了四个数进去,然后在查询长度的时候,发现长度=3,所以,集合中是不允许出现重复元素
redis支持存储hash数据,也就是value是一个map,hash特别适合用于存储对象。
> hset hash1 key1 12 1 > hset hash1 key2 13 1 > hset hash1 key3 14 1
或者
> hset student name wang age 10 school ustc 3
key : student
value : name wang age 10 school ustc
value是map结构。
说明:
> hgetall student name wang age 10 school ustc
说明:该命令会返回指定的key对应的hash值,注意如果该key对应的值类型不是hash会报错。
> hget student name wang > hget student school ustc
> hexists student age 1 > hexists student phone 0
说明:如果存在,返回(integer) 1,否则返回(integer) 0
> hlen student 3 > hlen user 2
如果删除整个键值对,使用上面对字符串值操作中的del命令即可。
> del student 1 > hgetall student null
如果只是删除hash值中指定的键值对,则使用如下命令。
语法格式:hdel key field
> hdel student name 1 > hgetall student age 10 school ustc
> hget hash1 key1 12 > hset hash1 key1 16 0 > hget hash1 key1 16
hmget hash1 key1 key2 key3 16 13 14
redis不但提供了无序集合(Set),还提供了有序集合(Sorted Set)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。
很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等
> zadd zset1 10.1 v1 1 > zadd zset1 11.1 v2 1 > zadd zset1 9.1 v3 1
> zcard zset1 3
> zrange zset1 0 2 withscores v3 9.0999999999999996 v1 10.1 v2 11.1
> zrank zset1 v3 0
如果将v3改成11.1,排名会是什么结果?
> zadd zset1 1.1 v3 1 > zrange zset1 0 2 withscores v1 10.1 v2 11.1 v3 11.1
你会发现两个都是11.1,v2在前v3在后,说明在两个相同的情况下,回去比较他们value值。