在学习redis五大数据结构之前我们首先要知道这些数据结构适合在什么场景下使用,才不会学习起来那么空洞
一、String(字符串)类型
String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类
常用使用场景:
1、缓存结构体信息
2、计数功能
二、Hash
Hash对象的键是一个字符串类型,值是一个键值对集合。
应用场景:该类型非常适合于存储对象的信息(结构体信息)。如一个用户有姓名,密码,年龄等信息。
三、List
可以向Redis列表的头部或尾部添加元素。
在插入时,如果该键并不存在,Redis 将为该键创建一个新的链表,如果这个键已经存在,则是向 list 添加元素。
应用场景:
1、list列表结构常用来做异步队列使用
2、list可用于秒杀抢购场景
四、set
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
应用场景:例如每个用户只能参与一次活动、一个用户只能中奖一次等等去重场景
五、zset (有序集合类型)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
应用场景:使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。如排行榜
1.String的操作命令
- set key value
- 将单个字符串值value关联到key,存储到Redis
set name zs #key为 name, 值为zs
-
get key
- 返回key关联的字符串值
get name #获取值,key为 name
-
mset key value key value
- 同时设置一个或多个 key-value
mset name zs age 18 #设置了两对key ,name=zs ; age=18
-
mget key key
- 获取多个值
mget name zs #获取key为name和zs的数据的值
-
incr key
- 将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
incr age #age的值增加1
-
decr key
- 将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
decr age #将age的值减去1
-
incrby key number
- 将 key 中储存的数字值增加指定数字
incrby age 2 #在age的值的基础上增加2
-
decrby key number
- 将 key 中储存的数字值减少指定数字
decrby age 2 #在age的值的基础上减去2
2.key的操作
-
keys
- 查看所有的key
keys *
-
del key
- 删除指定的某个key
del username #删除key为username的数据
-
expire key secnods
- 设置key的过期时间(secnods秒后过期)
expire name 10 #设置name的过期时间10s
-
ttl key
- 查看key的过期时间
ttl name #查看name的过期时间
-
flushall
- 清空整个redis服务器数据,所有的数据库全部清空
flushall
-
flashdb
- 清除当前库
flushdb
-
select index
- 选择数据库,redis中默认有16个数据库,名称分别为0,1,2,15 , index数据库索引
select 1 #选择第2个数据库
3.List的操作
-
lpush key value value
- 将一个或多个值 value 插入到列表 key 的表头(最左边)
lpush names zs ls #往key为 names 的list左边添加值“zs”和“ls”
-
lrange key start stop
- 返回列表 key 中指定区间内的元素,查询所有的stop为-1即可
lrange names 0 -1 #查看names的所有元素
-
rpush key value value
- 将一个或多个值 value 插入到列表 key 的表尾(最右边)
rpush names zl cq #往key为 names 的list右边添加值“zl”和“cq”
-
lpop key
- 移除并返回列表 key 的头(最左边)元素。
lpop names #移除并返回names列表的头(最左边)元素
-
rpop key
- 移除并返回列表 key 的尾(最右边)元素。
rpop names #移除并返回names列表的尾(最右边)元素。
-
lrem key count value
-
根据count值移除列表key中与参数 value 相等的元素count 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值。
lrem names 1 zs #删除names列表中左边第1个“zs” lrem names 0 ls #删除names列表中所有的“ls” lrem names -1 cq #删除names列表中右边第1个“cq”
-
Redis中如何实现栈和队列
- list控制同一边进,同一边出就是栈
- list控制一边进,另一边出就是队列
4.Set的操作
set集合是一个无序的不含重复值的队列
-
sadd key value value
- 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
sadd colors red green yellow blue #往colors这个set集合中存放元素: red,green,yellow,blue
-
smembers key
- 返回集合 key 中的所有成员。
sadd colors red green yellow blue #往colors这个set集合中存放元素: red,green,yellow,blue
-
smembers key
- 返回集合 key 中的所有成员。
smembers colors
-
srem key member
- 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
srem colors red #删除colors中的 red元素
-
SCARD key
- 返回集合存储的key的基数 (集合元素的数量).如果key不存在,则返回 0。
scard colors
5.ZSet的操作
ZSet(sorted sets)在Set基础上增加了“分数”,让set集合有了排序功能
-
zadd key score value score value
- 将所有指定成员添加到键为
key
有序集合(sorted set)里面,如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置zadd heights 150 zs 160 ls #有序集合heights中zs的分数为150 ,ls的分数是 160
-
ZCARD key
- 返回key的有序集元素个数。key存在的时候,返回有序集的元素个数,否则返回0。
zcard heights
-
ZCOUNT key min max
- 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。
zcount heights 150 160 #获取heignhts中分数为 150到160的元素数量
-
ZPOPMIN key [count]
- 删除并返回有序集合
key
中的最多count
个具有最高得分的成员。如未指定,count
的默认值为1。zpopmax heights 2 #删除最高分数的前2个元素
6.Hash的操作
Hash类似于jdk中的Map,一个key下面以键值对的方式存储数据
-
HSET key field value
- 设置 key 指定的哈希集中指定字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段在哈希集中存在,它将被重写。
hset user:1 name zs #给"user:1"这个key设置name=zs键值对
-
HGet key name
- 获取hash类型的name键对应的值
hget user:1 name #获取user:1总的name字段
-
HGet key name
- 获取hash类型的name键对应的值
hget user:1 name #获取user:1总的name字段
-
HMSET key field value field value
- 批量添加name=value键值对到key这个hash类型
hmset user:2 name zs age 18 #给"user:2"这个key设置name=zs键值对和age=18键值对
-
HMGET key field field
- 批量获取hash类型的键对应的值
hmget user:2 name age #获取user:2总的name和age字段
- hkeys key
- 返回哈希表 key 中的所有键
hkeys user:2 #返回user:2总的所有字段
-
hvals key
- 返回哈希表 key 中的所有值
hvals user:2 #返回user:2中的所有值
-
存储对象的两种方式
- 使用string结构
set user:1 '{id:1,name:zs}'
- 使用hash
hset user:2 id 2 name ls
基本的命令就分享到这里啦!