`

redis常用命令

 
阅读更多

敲代码这么久,redis也用的比较多了,把自己平常知道的知识点记录一下,方便以后查看。

一、redis配置,持久化、内存满了之后的策略、超时时间等等,都是可配置的。

二、Redis的持久化存储提供两种方式:Snapshot(RDB)与Append-only file(AOF)。RDB是默认配置。AOF需要手动开启。 

现在Redis的配置中默认是关闭AOF模式的。 

如果要开启AOF模式,修改Redis的配置文件redis.conf。

 

三、redis绝大部分操作基于内存,类似hashmap查找和操作时间复杂度都是O(1);数据结构专门设计,简单。采用单线程,避免不必要的上下文切换和竞争。使用多路I/O复用模型,非阻塞IO。redis最可能瓶颈的地方是内存或网络带宽,而不是CPU。虽然redis处理请求是单线程,但持久化等操作是fork出子线程或子进程处理的。

单进程多线程模型:mysql、memcached、oracle(windows版本);

多线程模型:orcle(linux版本)

nginx两类进程:一类是master进程(管理进程),一类是worker进程(工作进程),启动方式可分为单进程启动(一个进程,既是master又是worker)、多进程启动(仅有一个master,至少一个worker)。其中,master主要进行一些全局性的初始化工作和管理worker的工作,事件都是在worker中处理。

 

 

1、连接

#切换到redis目录下运行 
redis-cli.exe -h 127.0.0.1 -p 6379

 2、查询内存占用等信息

info
info cpu
info commandstats
...

 

 3、查询key,模糊匹配。众所周知,当redis中key数量越大,keys 命令执行越慢,而且最重要的会阻塞服务器,对单线程的redis来说,简直是灾难,终于找到了替代命令scan

scan 0
scan 0 count 100
scan 0 match liugangxin* count 100

 4、查看慢日志

SLOWLOG GET  
1) 1) (integer) 4               # 日志的唯一标识符(uid)  
   2) (integer) 1378781447      # 命令执行时的 UNIX 时间戳  
   3) (integer) 13              # 命令执行的时长,以微秒计算  
   4) 1) "SET"                  # 命令以及命令参数  
      2) "database"  
      3) "Redis"  

 

 四、管道技术

Reids是一个cs模式的Tcp服务,类似于http的请求。 当客户端发送一个请求时,服务器处理之后会将结果通过响应报文返回给客户端 。  
那么当需要发送多个请求时,难道每次都要等待请求响应,再发送下一个请求吗?难道请求之后必须阻塞等待返回值?
当然不是,这里就可以采用Redis的管道技术。  
举个例子,如果说jedis是:request response,request response,…;  
那么pipeline则是:request request… response response的方式。

所以,管道比较适合用来做批量操作。注意:管道(pipeline)是打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。即可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline通过减少客户端与redis的通信次数来实现降低往返延时时间,而且Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。

       管道(Pipelining) VS 脚本(Scripting):

  大量 pipeline 应用场景可通过 Redis 脚本(Redis 版本 >= 2.6)得到更高效的处理,后者在服务器端执行大量工作。脚本的一大优势是可通过最小的延迟读写数据,让读、计算、写等操作变得非常快(pipeline 在这种情况下不能使用,因为客户端在写命令前需要读命令返回的结果)。

  应用程序有时可能在 pipeline 中发送 EVAL 或 EVALSHA 命令。Redis 通过 SCRIPT LOAD 命令(保证 EVALSHA 成功被调用)明确支持这种情况.

 

五、lua脚本,原子操作,不支持集群。

Jedis jedis = cache.getResource().getJedis();
String[] allUserKeys={"u1","u2"};
List<String> keys = Arrays.asList(allUserKeys);
List<String> params = new ArrayList<String>(); 
params.add("xx");
params.add("xxx");
String SCRIPT="";
String shaFuncKey = jedis.scriptLoad(SCRIPT);//加载脚本 
List<String> resultKeys=new ArrayList<String>();
try {
    resultKeys = (List<String>)jedis.evalsha(shaFuncKey, keys, params);
} catch (Exception e) {
    e.printStackTrace();
}

 

六、集群

Redis作者在3.0版本中已经加入了集群功能,而2.x版本中用ShardedJedis来实现分布式缓存,ShardedJedis是通过一致性哈希来实现分布式缓存的,通过一定的策略把不同的key分配到不同的redis server上,达到横向扩展的目的。其除了配置时有点区别,其他和Jedis基本类似。但不支持多命令操作,像mget、mset、brpop等。集群

    即使有了主从复制,每个数据库都要保存整个集群中的所有数据,容易形成木桶效应。
    使用Jedis实现了分片集群,是由客户端控制哪些key数据保存到哪个数据库中,如果在水平扩容时就必须手动进行数据迁移,而且需要将整个集群停止服务,这样做非常不好的。
redis3.0集群的特点:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster
负责维护node<->slot<->value

 

 

测试:

先说说bitmap,就是基于位的映射,一个bit位标记一个元素的value,长度取决于最大的那个值。可做排序用。

优点:

    1. 运算效率高,不进行比较和移位;

    2. 占用内存少,比如最大的数MAX=10000000;只需占用内存为MAX/8=1250000Byte=1.25M。

缺点:

    1. 所有的数据不能重复,即不可对重复的数据进行排序。(少量重复数据查找还是可以的,用2-bitmap)。

 

 

    2. 当数据类似(1,1000,10万)只有3个数据的时候,用bitmap时间复杂度和空间复杂度相当大,只有当数据比较密集时才有优势

bug问题描述,setbit方法,offset偏移量就是比特位字符串的长度,即偏移100,就长度为100,所以当偏移量很大时,这个值就特别长,占用内存也特别大。导致线上缓存暴增。

 

 

说明

List 数据类型 没有 List 个数限制,单个元素最大值为 512 MB,推荐 list的元素个数小于 8192, value 最大长度不超过 1 MB。

Set 数据类型 没有 set 个数限制,单个元素最大值为 512 MB,推荐 set 的元素个数小于 8192, value 最大长度不超过 1 MB。

Sorted set 数据类型 没有 sorted set 个数限制,单个元素最大值为 512 MB,推荐 sorted set 的元素个数小于 8192, value 最大长度不超过 1 MB。

Hash 数据类型 没有 field 个数限制,单个元素最大值为 512 MB,推荐元素个数小于 8192, value 最大长度不超过 1 MB。

DB 数限制 每个实例支持 256 个 DB。

监控报警 云数据库 Redis 版未提供容量告警,需要用户到云监控中进行配置。配置方法请参见文档。

建议设置好以下监控的报警:实例故障、实例主备切换、已使用连接百分比、操作失败数、已用容量百分比、写入带宽使用率、读取带宽使用率。

数据过期删除策略 - 主动过期,系统后台会周期性的检测,发现已过期的key时,会将其删除。

- 被动过期,当用户访问某个key时,如果该key已经过期,则将其删除。

空闲连接回收机制 服务端不主动回收 Redis 空闲连接,由用户管理。

数据持久化策略 采用 AOF_FSYNC_EVERYSEC 方式,每秒 fysnc。

 

分析redis工具:

https://github.com/xiepaup/dbatools

分享到:
评论

相关推荐

    redis 常用命令

    ### Redis常用命令详解 Redis(Remote Dictionary Server)是一款开源的键值存储系统,以其高性能、低延迟的特点在缓存、消息队列等场景下得到广泛应用。本文将对Redis中的常用命令进行详细介绍,帮助读者更好地...

    redis基本命令-封装redis常用基本命令.zip

    封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip封装redis常用基本命令.zip...

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    redis常用命令详细带例子

    redis命令实践 redis常用命令详细带例子

    redis常用命令操作.txt

    redis常用命令操作.txt

    REDIS常用命令操作(带截屏)

    ### Redis常用命令详解 Redis是一种高性能的键值对存储系统,因其卓越的速度和灵活性而广泛应用于缓存、消息队列等多种场景。本文将基于提供的文件信息,深入解析几个Redis中的常用命令及其应用场景。 #### 一、键...

    第6单元 Redis常用命令2

    【Redis常用命令详解】 Redis是一种高性能的键值存储系统,广泛应用于缓存、数据库和消息队列等场景。本篇文章将深入讲解Redis中的一些常用命令,包括Connection连接、Server管理和Key操作。 **6.1 Connection连接...

    Redis 常用命令和场景使用.docx

    Redis 常用命令和场景使用 Redis 是一个开源的、基于内存的数据结构存储系统,提供了丰富的命令来处理不同的数据类型和场景。下面是 Redis 中一些常用的命令和场景使用: 字符串命令 1. SET:设置键值对,覆盖...

    Redis常用命令实践.md

    ### Redis常用命令实践 #### 一、概述 Redis是一种高性能的键值存储系统,它能够支持多种复杂的数据结构,如字符串、哈希、列表、集合、有序集合等,并且提供了丰富的命令来操作这些数据结构。这使得Redis不仅适用...

    Redis常用命令、Redis高级命令、Redis命令、redis命令实践

    ### Redis 命令实践详解 #### 一、基本命令 Redis 提供了一系列的基本命令来操作键值对数据。这些命令简单易用,是 Redis 的基础功能。 ##### SET **命令格式**: `SET key value` - **作用**: 设置键 `key` 的...

    redis常用命令整理.docx

    Redis 常用命令整理 Redis 是一种高性能的 Nosql 数据库,具有丰富的命令集,以下是 Redis 中常用的命令整理: 连接操作相关的命令 * quit:关闭连接(connection) * auth:简单密码认证持久化 * save:将数据...

    redis常用命令以及在java中的具体实现以及配置.docx

    ### Redis 常用命令及 Java 实现 #### 一、Redis 命令简介 Redis 是一个开源的键值数据库系统,它提供了多种数据结构的存储方式,并且支持简单的事务处理、主从同步等功能。在开发过程中,Redis 的一些基本命令被...

    redis常用命令集合.pdf

    以上所述的知识点涵盖了Redis的基本使用,包括数据类型、特性、操作命令、缓存问题及解决方案等,对于理解和运用Redis具有重要的参考价值。在实际使用Redis的过程中,开发者应根据应用场景和需求选择合适的数据结构...

    8-Redis常用命令-list-set-zset.docx

    Redis 常用命令 - List 类型详解 Redis 是一个开源的、基于内存的数据结构存储系统,支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)及 zset(有序集合)。本文将详细介绍 Redis 的 ...

Global site tag (gtag.js) - Google Analytics