简介
Redis是速度非常快的非关系型(NOSQL)数据库,可基于内存 亦可持久化的日志型、Key-Value数据库,
数据类型
按tab健可以命令补全
String 类型
> set hello world
OK
> get hello
"world"
> del hello
(integer) 1
> get hello
(nil)
mset 和mget可以设置多个String值
常用命令
incr age
decr age
incrby age 2
decrby age 2
incrbyfloat score 1.1
可以实现自增自减或加减等,
append hello world //给hello追加world
strlen hello //查看hello长度
- 应用场景
常规计数:微博数,粉丝数,访问量,文章数等。
Hash类型
key [field value]
快速理解Hash类型,类似于数据库,一个primary key 对应多个key value
hmset user1 name deer age 18 //这里primary key是user1,name,age都是key
hgetall user1 //获取userid=1的数据
hset hget分别是只存和只获取一组key value的 如hmset user1 name deer;
获取所有的value值
hdel user1 age #删除,返回删除的个数
- 应用场景,适合存储对象,比如商品信息,用户信息等等
购物车 cart:001 prod:01 1 prod:02 1; 用户id作为key 商品id作为field 假如购物车作为value;
List
Redis list 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
- list常用命令
rpush james c b a/从右向左插入cba, 返回值3
lrange james 0 -1 /从左到右获取列表所有元素 返回 c b a
lpush key c b a /从左向右插入cba
linsert james before b teacher /在b之前插入teacher
lrange key star end /索引下标特点:从左到右为0到N-1
lindex james -1 /返回最右末尾a,-2返回b
llen james /返回当前列表长度
lpop james /把最左边的第一个元素c删除
rpop james /把最右边的元素a删除
应用场景:关注列表,粉丝列表,消息列表等
另外lrange命令从某个索引开始读取到某个索引结束,可以用来实现分页功能
Set命令
Set是一个集合 保存多元素,与list不一样的地方是不允许有重复元素,集合是无需的,支持增删查改,还支持求交集并集差集等
常用set命令
exist user //检查user键值是否存在
sadd user a b c //向user插入3个元素,返回3
sadd user a b //若再加入相同的元素,则重复无效,返回0
smembers user //获取user的所有元素,返回结果无序
srem user a //返回1,删除a元素
scard user //返回2,计算元素个数
sismember user a //返回a是否是user的元素
sinterstore key1 key2 key3 //求交集,将交集存在key1内
应用场景:如微博的共同关注,把两个用户的关注放入两个集合中,求交集。如抽奖,用spop key number 命令抽取用户
setA={A,BC} setB={B, C}
交并集
1)集合与集合之间的交集
sinter setA setB ->得到集合{B,C}
2) 集合与集合之间的并集
sunio setA setB ->得到集合{A,BC}
3)集合与集合之间的差集
sdif setA setB ->得到集合{A}
Zset
Zset是有序集合
假设下列是打赏的zset
zcard key //显示成员数量
ZRANk key member //显示某个成员排名
zrevrank key member //显示某个成员逆序排名
ZREVRANGE key start stop [WITHSCORES] //逆序显示成员
- 应用场景
按消息维度维护的场景,比如用户在线市场列表,直播打赏礼物排行列表等,微博热搜榜等,