redis

Redis的数据类型

String

1.set name zhangsan

2.get name

3.setex name 5 zhangsan --设置时间为5秒

4.getset name zhangsan --给name设置值为张三,并且返回原来的值

5.setnx name zhangsan --只有name不存在时,设置zhangsan ,否则不设置

6.incr age --给age 的值加一,如果age不是数字类型,那么就报错

7.decr age

hash

(用于封装一个对象的,比如说淘宝购物车)

1.hset shoppingCart name phone

2.hget shoppingCart name

3.hmset shoppingCart name phone price 1000 color red

--同时设置大key中的多个小key

4.hmget shoppingCart name price color

-- 同时获取大key中多个小key的值

5.hkeys shoppingCart --获取所有小key

6.hvals shoppingCart --获取所有小key对应的值

7.hgetall shoppingCart --获取所有键值对

8.hexists shoppingCart name --判断小key是否存在

list

用再消息队列,心跳包,

1.lpush heart 4 3 2 1

2.rpush heart 1 2 3 4

3.lrange heart 2 3 -- 获取第二个到第三个的元素

4.llen heart -- 获取列表长度

5.rpop heart --右右右弹出并获取最后一个元素

6.brpop heart 10--移除并且获取最后一个元素,如果列表没有元素,元素会等待10秒,10秒内如果有元素进来,那么就弹出

7.lindex heart 2 -- 获取第2个索引上的值

8.lrem heart 2 1 --移除heart上第2个开始往后1个的元素

set

(微信的朋友圈点赞)praise 是点赞 comment是评论

1.sadd praise zhangsan lisi wangwu ---向集合添加多个成员

2.smembers praise---- 返回集合的所有元素

3.scard praise----- 返回集合的成员数

4.sinter praise comment返回所有集合的交集

5.sunion praise comment返回所有集合额并集

6.sdiff zhangsan lisi 返回所有集合的差集

7.sismember praise zhangsan 判断zhangsan 有没有在praise中

8.spop praise --- 随机弹出一个元素

9.srem praise zhangsan lisi--- 移除集合中一个或者多个元素

zset

lol战力榜

zadd lol 100 zhangsan 200 lisi 300 wangwu --往集合中添加一个或者多个成员,或者更新已经存在的分数

zrange lol 50 350 [withscores] --表示50到350的从低到高排序,加上withscores表示一起返回列名

zreverange lol 50 350 [withscores] --表示50到350的从高到排序,加上withscores表示一起返回列名

zincrby lol 20 zhangsan --- 给zhangsan 加20分

zrem lol zhangsan lisi ---- 移除集合中的成员

淘汰策略

 

 

 

 

1.会立刻删除过期的key吗

不会立刻删除,因为删除key时肯定时主服务来删除,所以当他在执行删除指令的时候,他就无法进行其他操作,立刻删除会影响性能

2.redis的删除机制

主动删除

redis获取一个key值,先判断这个key是否过期,如果过期,则执行删除操作

惰性删除

redis在后台会开启一个定时任务,定时去更具指定的淘汰策略来删除key

redis中的问题

缓存穿透

人为攻击行为,查询一个数据库中没有,缓存中也没有的数据,如果一直查询该数据,就会直接穿透缓存,到达数据库,可以会导致数据库宕机

解决方案

1.直接给假数据

2.布隆过滤器

缓存击穿

缓存中某一个热点数据的key突然过期,造成大量的请求无法从缓存中获取数据,而直达数据库

解决方案

1.热点数据永远不过期

2.限流(在单位时间内,允许多少个请求来访问数据)

3.降级(缓存降级是指当访问量剧增,即使是有损部分其他服务,仍然需要保证主服务可用,可以将其他次要访问的数据进行缓存降级,从而提升主服务的稳定性)

缓存雪崩

缓存中大量的key在同一时间过期,造成大量的请求无法从缓存中获取数据,而直达数据库。感觉就像出现了雪崩

解决方案

1.热点数据永不过期

2.不同的key随机生存时间

Redis是单线程的吗?

  1. 对于IO读写在6.0版本之前是单线程的,在6.0版本之后是多线程的

  2. 对于Redis的读写指令是单线程的

  3. 对于Redis在执行一些数据备份、淘汰key这些机制是多线程的

Redis在处理数据读写方面是单线程的?为什么还那么快?

1.基于内存操作

2.因为是单线程,所以没有线程切换带来的开销

3.redis的nio多路复用

单节点存在的问题

数据安全

Redis宕机,数据就丢失了【因为数据默认存储介质是内存】

读写瓶颈

读11 w/s 写8w /s

故障转移

为了保证服务器具备写的功能,就需要做主从选举

存储瓶颈

单节点存储的数据是有限的

数据持久化

RDB 方式

是将 redis 某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法,(数据存储在查看dump.rdb中),是默认自动开启的

AOF 方式

是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍(数据存储在appendonly.aof 中)

 

 

 

posted @   linxiaofeng  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示