set age 23 ex 10 : ex 持续时间 10秒
ttl age : 表示查看age的剩余时间
setnx : 已存在key则不插入,无则插入 例子:setnx name cys
mset:批量插入,例子:mset name cys age 23 sex boy birthday 198904120018
mget :查询 例子:mget birthday 结果 198904120018
incr num :创建一个值为1,key为num的数据,每执行一次就加1
decr num2: 创建一个值为-1,key为num2的数据,每执行一次就减1
incrby num3 3: 创建一个值为3,key为num3的数据,每执行一次就加3
decrby num4 4: 创建一个值为-4,key为num4的数据,每执行一次就减4
incrbyfloat score 1.1 : 创建一个值为1.1,key为score的数据,每执行一次就减1.1
append:后面追加拼接 例子,set string cys,然后append string nameis ,结果是cysnameis
哈希
hmset:例子 hmset user name cys age 31 存入键名为user,name=cys age=31
hmget: hmset user name ,结果 cys
==================================================
list 列表
lrange keyname 0 -1 : 0表示从第一个开始,-1表示到最后一个
一共有16个数据 通过select 0, select15切换
flushall 清空所有数据
flushdb 清空当前数据库
=====================================
集合
sadd user age name sex : 向user集合里面添加元素 age,name,sex
smembers user 查看user集合里面的元素
sinter user user2 查看两个集合的元素交集
有序集合
zadd count 13 c1 14 c2 16 c3 9 c4 向count集合里面添加元素和元素的值
zrange count 0 -1 withscores 按顺序给元素排序
===================
exists count :查询键 count是否存在 返回 0或者1
type count :查询键 count是什么类型
expire count 5 : 使键 count 5秒后删除
del count : 删除count
dbsize 查询键的数量
============================
订单场景,管理某个user的订单
各个订单的信息可以分别 hmset进一条条数据,然后lpush进这个用户,
新来的订单,重新hmset成一条数据,再把key lpush进刚刚的列队
hmset order1 money 1 time 2020331
hmset order2 money 12 time 2020221
hmset order3 money 8 time 2020116
hmset order4 money 5 time 2020123
lpush user order1 order2 order3 order4
类似这种操作就能管理起来
===========
缓存血崩
比如大量并发请求同时访问redis里面一个不存在的key,redis里面没有就会去mysql查询,而mysql连接池并发数有限,就会血崩
处理思路:只让一个用户访问,其他的排队,这个用户访问进redis,发现没有,去走mysql,mysql查到之后,把数据扔进redis,让后面的用户可以访问
============
缓存穿透
大量【无效】的请求(比如查询orderid)去查询redis,redis也没有就会去mysql查询,这样会对mysql造成不必要的压力
解决方案,加一个布隆过滤器
把数据库的数据(数据库的所有orderid)同步到过滤器,每次请求mysql之前,先到过滤器看看是否有该orderid,有的话查具体信息,没有则返回