首页 > 数据库 >redis

redis

时间:2023-09-07 17:23:26浏览次数:35  
标签:请求 单线程 redis value key 多线程

1.Redis是单线程的

  redis是基于内存操作的,CPU不是操作瓶颈,redis的瓶颈是根据机器内存和网络宽带,那既然CPU不是瓶颈,那就意味着可以用单线程来实现,那就用单线程了!

Redis是C语言写的,官方提供的十万QPS

redis为什么单线程就快?

  1.误区:高性能的服务器一定是多线程的,多线程一定比单线程效率高,但其实多线程由于上下文切换是比较影响性能的

  2.核心:redis是将所有数据放到内存中的,单线程就是比多线程效率高,省去了多线程的上下文切换的

 

基本命令:

String命令:

set key value 设置键值对

appen key value 追加值

 

exists key      判断是否存在键 存在返回1 否则返回0

 

get key          获取键值

incr key         自动增长1

decr key        自动减1

 

incrby key num  按步长自动增加

dedrby key num  按步长自动减少

getrange key start end  按照去区间截取字符串

 

setrange key start value 替换指定位置开始的字符串

setnx key value  不存在键则设置,存在则不操作(f常用在分布式锁中)

setex key expire value 设置过期时间

mset(msetnx) key1 value1 key2 value2...... 一次性设置多个键值对,原子性操作(一个操作失败,全部都失败)

mget key1 key2......   一次性获取多个键值对

 

getset 先get再set

 

 

List命令:

所有的list命令都是以l开头

lpush/rpush kay value

 

 lpop/rpop   从左/右边弹出第一个元素

 

lindex key index

 

llen key  获取长度

 lrem key count value  移除指定值

 

trim  key start end 修剪

 Set命令:无序不重复集合

命令都是以s开头

sadd key value1 value2

 srem key 移除

  

zset

hash:key-<key,value>(map)集合

 

Redis三大问题:击穿,穿透,雪崩

1.击穿:这对一个热点key,在key过期的瞬间,大量请求打到了数据库,给数据库造成巨大压力,这就是击穿

  解决: 1.如果key特殊的话,可以设置永不过期

      2.加锁,在第一个请求没有结束之前,拒绝后续请求,不过高并发分布式锁对是个考验

2.穿透:针对不存在的key在,瞬间大量请求打到数据库,给数据库造成压力

  解决: 1.布隆过滤器,将所有可能存在的数据通过hash存储,不存在的请求直接拦截,但有一定的出错几率

      2.设置空值,请求不存在的key直接返回null,不推荐,null也占内存而且万一将来有了数据就不统一了

3.雪崩:针对大量key同时失效或者直接缓存失效,大量请求打到数据库

  解决: 1.事前:

                       给这些同一时间过期的加上随机数,是他们在不同时间过期

         集群+主从-哨兵

     2.事中:限流降级,限制请求数量,超过的降级,直接返回默认值或者空或者某些消息

     3.事后:redis数据持久化快照或日志,一旦失效马上恢复

  

标签:请求,单线程,redis,value,key,多线程
From: https://www.cnblogs.com/lvqiang/p/17682320.html

相关文章

  • Redis复习:(1)RedisTempalte之BitMap操作
    packagecn.edu.tju.service.impl;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.dao.DataAccessException;importorg.springframework.data.redis.connection.RedisConnection;importorg.springframework.data.redis.co......
  • Redis持久化-RDB演示
                ......
  • Redis的淘汰策略
    edis默认的淘汰策略Redis是一款开源的高性能内存数据库,广泛应用于Web应用缓存、消息队列、实时数据分析等领域。在使用Redis时,淘汰策略是其中一个重要的概念,它决定了当Redis内存不足时,被选择删除的key是哪些。Redis的淘汰策略有6种,分别是:1.noevictionnoeviction是默认淘汰策略,即当......
  • 【Redis】Could not create server TCP listening socket __6379_ bind_ 在一个非套接
    问题描述:安装Redis,redis-server无法启动,报错。[34420]20Aug21:43:21.110#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo[34420]20Aug21:43:21.110#Redisversion=5.0.14.1,bits=64,commit=ec77f72d,modified=0,pid=34420,juststarted[34420]20Aug21:43:21.1......
  • MacBook安装Redis
    1.下载redis最新的稳定版https://github.com/redis/redis/archive/7.2.1.tar.gz2.解压TIGERHUTANG-MB0:redisroot#tar-zxf7.2.1.tar.gzTIGERHUTANG-MB0:redisroot#ls-latotal8232drwxr-xr-x4rootstaff1289710:42.drwxr-xr-x4tigerhu......
  • Redis系列之——主从复制原理与优化、缓存的使用和优化
    @目录一什么是主从复制1.1原理1.2主库是否要开启持久化1.3辅助配置(主从数据一致性配置)二复制的配置2.1slave命令2.2配置文件四故障处理五复制常见问题缓存的使用和优化一缓存的收益与成本1.1受益1.2成本1.3使用场景二缓存更新策略三缓存粒度控制四缓存穿透,缓存......
  • py 导入json到redis的代码示例
    这里是一个py导入json到redis的代码示例,它会将字典、列表和元组类型的值序列化为JSON字符串。在这个修改后的脚本中,使用`json.dumps()`函数对这些数据类型进行序列化处理。```pythonimportjsonimportredis#替换为您的JSON文件路径及Redis服务器连接参数json_file_pa......
  • Redis持久化机制
    1.怎么保证Redis挂掉之后再重启数据可以进行恢复?(持久化)很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了防止系统故障而将数据备份到一个远程位置。Redis不同于Memcached......
  • 什么是 Redis?
    Redis(RemoteDictionaryServer)是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是Redis的......
  • Linux基础38 负载均衡会话保持(redis配session共享), 四层负载均衡, nginx端口转发
    一、负载均衡会话保持当用户访问页面登录后,会在服务器上生成一个session文件,并且返回给浏览器一个session_id内容的cookie,cookie会存在浏览器中,下一次访问cookie会携带session_id来到服务器验证,没有变化则说明是登录状态,不需要重新登录1.session共享的方法1.把session文件保......