他们是:字符串+列表+集合+哈希+有序集合
String字符串比如缓存用户信息,需要使用JSON序列化成字符串存入缓存。取用户信息时又会经过一次反序列化的过程。
redis是动态字符串,最大512M,小于1M时加倍现有空间,大于1M时加倍1M的空间set key userinfo;
get key;
批量对多个字符串读写,节省网络耗时
mset key1 value1 key2 value2
mget key1 key2
设置key的过期时间-涉及到过期策略
## 设置5秒过期时间
set key1 value1
expire key1 5
## 合并set+expire
setex key2 5 value2
## 如果存在key3就不执行
setnx key3 value3
计数功能
超过sigined long的最大值最小值,会报错
## 自增key1的值
set key1 50;
incr key1;
## 合并指令
incrby key1 50;
list列表-相当于LinkedList
插入删除块,查找慢
作用:常用作异步队列使用。将需要延后处理的任务序列化成字符串放入redis,另一个线程从列表轮询进行执行。
rpush key1 value1 value2 value3
lpop key1
"value1"
lpop key1
"value2"
llen key1
1
栈-右边进右边出
rpush key1 value1 value2 value3
rpop key1
"value3"
lpop key1
"value2"
ltrim截取
##截取这个区间的值(0表示第一个数 -1表示最后一个数)
ltrim start_index end_index
快速例表:ziplistziplistziplistziplistziplist
hash字典-相当于hashmapredis字典只能是字符串,与hashmap的重哈希方式不一样,redis为了提高性能,采用了渐进式的rehash策略
渐进式的rehash会保留新旧两个hash结构,然后在后续定时任务以及hash指令中,逐渐将旧内容迁移到新hash结构。
hash结构也可以存储用户信息,不同于String串一次性序列化整个对象,hash字典只序列化某些字段实现部分获取。
hset object key1 value1;
hset object key2 value2;
hgetall object;
hlen object;
hget object key1;
hincry object key1 1; //字典中单个key也可单独自增
set集合-相当于hashSet
用来存储中奖用户的id,因为有去重的功能,保证一个用户不会中将两次
sadd key1 value1;
sadd key1 value2;
spop key1;
smembers key1 //查询键为key1的所有值
"value1"
sismember key1 value1; //查询某value是否存在
scard key1 //查询键为key1值得个数
zset有序集合-相当于sortedSet
它是一个set保证value得唯一性,而且它可以给每个value赋一个排序权重。
存储一对多得数据,并且对多的一方按照权重进行排序
zadd banji stu1 56;
zadd banji stu2 69;
zadd banji stu3 80;
zrem banji 80; //删除value
zrange banji 0 -1; //按score进行排序
zrevrange banji 0 -1; //按score逆序排序
zrangebyscore banji 60 90; //根据分值区间
zcard banji; //相当于count
容器型数据结构通用规则
list/set/hash/zset
create if not exists
drop if no elements
注意:若某字符串设置了过期时间,若使用set修改它,那么它的过期时间会消失。