声明:本篇文章参考于该作者的# Redis从入门到精通:中级篇,大家有兴趣,去关注一下。
1、字符串(String)
String(字符串)是Redis中最简单的一种数据结构,和MemCache数据结构是一样的,即Key-Value型的数据,根据Redis官方文档,Value最大值为512M。
1.1 存储结构:
1.2 基本操作:
1.2.1 保存数据
- 当value为数值String类型的时候
> set k1 hello
OK
> get k1
hello
- 当value为数值int类型的时候
> set k2 5
OK
> get k2
5
#自增1操作
> incr k2
6
#减4操作
> decrby k2 4
2
> get k2
2
- 当value为数值float类型的时候
> 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是不行的。
1.2.2 获取数据
> get k1
hello
1.2.3 删除数据
> del k1
1
> get k1
null
说明:
- 1)如果设置的key不存在,则创建新的键值对,如果已经存在,则更新值。
- 2)如果字符串字符之间有空格,需要引号括起来。如set mykey “hello world”
2、列表(List)
2.1 存储结构:
2.2 基本操作:
2.2.1 保存数据
> lpush l1 12
1
> lpush l1 13
2
> lpush l1 14
3
> lpush l1 15
4
> lpush l2 12 13 14 15
4
2.2.2 移除数据
#移除列表的第一个元素,最后插入的元素
> lpop l1
15
#移除列表的最后一个元素,第一个插入的元素
> rpop l1
12
再取数据的时候,我们就会发现,我们插入数据的时候,顺序是:12、13、14、15,取出数据的时候,就变成了15、14、13、12 ,说明List是按照先进后出的原则。(类似于队列)
2.2.3 查看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
2.2.4 测试一下是否可以存储相同的值
> lpush l3 12
1
> lpush l3 13
2
> lpush l3 13
3
> llen l3
3
我们通过查看List的长度可以知道,是可以存储相同的值的
3、集合(Set)
redis支持value值为集合(SET),Redis 中的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
3.1 存储结构:
3.2 基本操作:
3.2.1 保存数据
> sadd set1 12
1
> sadd set1 13
1
> sadd set1 14
1
> sadd set2 13 14 15
3
3.2.2 查看集合的长度
> sadd set1 12
1
> sadd set1 13
1
> sadd set1 14
1
> scard set1
3
3.2.3 获取数据
> smembers set2
13
14
15
3.2.4 查看某值是否存在在集合中
存在的时候,返回1,不存在的时候就为0
> sismember set1 13
1
> sismember set1 10
0
3.2.5 删除集合中的元素
> srem set1 13
1
> sismember set1 13
0
3.2.6 测试集合存储值是否唯一
> sadd set1 12
1
> sadd set1 13
1
> sadd set1 14
1
> sadd set1 13
0
> scard set1
3
我们一共存了四个数进去,然后在查询长度的时候,发现长度=3,所以,集合中是不允许出现重复元素
4、哈希(Hash)
redis支持存储hash数据,也就是value是一个map,hash特别适合用于存储对象。
4.1 存储结构:
4.2 基础操作:
4.2.1 保存数据
> 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结构。
说明:
- 1)如果对应的key不存在,则创建一个新的键值对,这个值就是一个hash,该hash的内容就是命令中的一对或多对filed/value。
- 2)如果对应的key已经存在,但key对应的value不是hash类型,则会用命令中的hash值覆盖该key的值,相当于该key的值变为一个hash类型。
- 3)如果对应的key已经存在,且key对应的value是hash类型,则就会往该hash值添加或覆盖新的field/value值。
4.2.2 获取数据(获取的是整个hash里面的值)
> hgetall student
name
wang
age
10
school
ustc
说明:该命令会返回指定的key对应的hash值,注意如果该key对应的值类型不是hash会报错。
4.2.3 获取数据(获取hash中指定的filed的value)
> hget student name
wang
> hget student school
ustc
4.2.4 检查hash值中指定的键值对是否存在
> hexists student age
1
> hexists student phone
0
说明:如果存在,返回(integer) 1,否则返回(integer) 0
4.2.5 查询hash值中键值对的数量
> hlen student
3
> hlen user
2
4.2.6 删除数据
如果删除整个键值对,使用上面对字符串值操作中的del命令即可。
> del student
1
> hgetall student
null
如果只是删除hash值中指定的键值对,则使用如下命令。
语法格式:hdel key field
> hdel student name
1
> hgetall student
age
10
school
ustc
4.2.7 替换值
> hget hash1 key1
12
> hset hash1 key1 16
0
> hget hash1 key1
16
4.2.8 获取多个key
hmget hash1 key1 key2 key3
16
13
14
5、有序集合(Sorted Set)
redis不但提供了无序集合(Set),还提供了有序集合(Sorted Set)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。
很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等
5.1 存储结构:
5.2 基本操作:
5.2.1 保存数据
> zadd zset1 10.1 v1
1
> zadd zset1 11.1 v2
1
> zadd zset1 9.1 v3
1
5.2.2 查看个数
> zcard zset1
3
5.2.3 排序
> zrange zset1 0 2 withscores
v3
9.0999999999999996
v1
10.1
v2
11.1
5.2.4 指定查看某个value的排名
> zrank zset1 v3
0
5.2.5 ⚠️(注意)
如果将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值。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/278756.html