• Redis服务端相关


    全局命令:

    查看所有键:

    keys *

    键总数:

    dbsize

    检查键是否存在:

    exists key

    删除键:

    del key [key...]

    键过期:

    expire key seconds

    键的数据类型:

    type key

    通过object encoding命令查询内部编码

    Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务

    1)纯内存访问

    2)非阻塞I/ORedis使用epoll作为I/O多路复用技术的实现

    3)单线程避免了线程切换和竞态产生的消耗

    键重命名:

    rename key newkey

    迁移键:

    move key db 用于在Redis内部进行数据迁移

    dump key + restore key ttl value 可以实现在不同的Redis实例之间进行数据迁移

    127.0.0.1:6379> dump name

    "x00x05allenax00x82x9a*T/xb9x9bx87"

    127.0.0.1:6379> dump age

    "x00xc0!ax006.9xfaQx06xe8 "

    127.0.0.1:6379> dump pass

    "x00x06abc123ax00x90 xe8x1bxf2xd4x8bxec"

    192.168.1.122:6379> restore name 0 "x00x05allenax00x82x9a*T/xb9x9bx87"

    OK

    192.168.1.122:6379> restore age 0 "x00xc0!ax006.9xfaQx06xe8 "

    OK

    192.168.1.122:6379> restore pass 0 "x00x06abc123ax00x90 xe8x1bxf2xd4x8bxec"

    OK

    migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]

    127.0.0.1:6379> migrate 192.168.1.122 6379 name 0 5000  默认是删除源库的键值

    OK

    127.0.0.1:6379> migrate 192.168.1.122 6379 "" 0 5000 copy keys age pass  copyreplace源库不删除键值

    OK

    遍历键:

    keys *

    scan命令可以解决keys命令可能带来的阻塞问题,同时Redis还提供了hscansscanzscan渐进式遍历hashzsetzset

    慢查询分析:

    慢查询两个参数slowlog-log-slower-than,单位是微秒,默认是10000微秒,即10毫秒。slowlog-max-len建议设置为1000以上。

    config set slowlog-log-slower-than 20000

    config set slowlog-max-len 1000

    config rewrite

    Redis配置持久化到本地配置文件,需要执行config rewrite命令

    获取慢查询日志长度:

    slowlog len

    获取慢查询日志:

    slowlog get [n]

    慢查询日志重置:

    slowlog reset

    Redis Shell

    redis-cli -r 5 -i 1 ping

    redis-cli -r 10 -i 1 info | grep used_memory_human

    echo "world" | redis-cli -x set hello  -x选项代表从标准输入读取数据作为redis-cli的最后一个参数

    redis-cli --latency 可以测试客户端到目标Redis的网络延迟

    redis-cli --bigkeys 使用scan命令对Redis的键进行采样,从中找到内存占用比较大的键值,这些键值可能是系统的瓶颈

     

     

    Redis服务器命令

    Redis 服务器命令主要是用于管理 redis 服务

    获取redis服务器的统计信息:

    [root@mysql1 src]# ./redis-cli

    127.0.0.1:6379> info

    # Server

    redis_version:3.2.3

    redis_git_sha1:00000000

    redis_git_dirty:0

    redis_build_id:edc5a285ff373c21

    redis_mode:standalone

    os:Linux 2.6.32-431.el6.x86_64 x86_64

    arch_bits:64

    multiplexing_api:epoll

    gcc_version:4.4.7

    process_id:50131

    run_id:5cda11ef7fb37e28d22a6458ecb292eaeb147ea8

    tcp_port:6379

    uptime_in_seconds:14723

    uptime_in_days:0

    hz:10

    lru_clock:11206608

    executable:/software/redis-3.2.3/src/./redis-server

    config_file:

    # Clients

    connected_clients:1

    client_longest_output_list:0

    client_biggest_input_buf:0

    blocked_clients:0

    # Memory

    used_memory:824104

    used_memory_human:804.79K

    used_memory_rss:8224768

    used_memory_rss_human:7.84M

    used_memory_peak:824104

    used_memory_peak_human:804.79K

    total_system_memory:2087575552

    total_system_memory_human:1.94G

    used_memory_lua:65536

    used_memory_lua_human:64.00K

    maxmemory:0

    maxmemory_human:0B

    maxmemory_policy:noeviction

    mem_fragmentation_ratio:9.98

    mem_allocator:jemalloc-4.0.3

    # Persistence

    loading:0

    rdb_changes_since_last_save:0

    rdb_bgsave_in_progress:0

    rdb_last_save_time:1470824081

    rdb_last_bgsave_status:ok

    rdb_last_bgsave_time_sec:0

    rdb_current_bgsave_time_sec:-1

    aof_enabled:0

    aof_rewrite_in_progress:0

    aof_rewrite_scheduled:0

    aof_last_rewrite_time_sec:-1

    aof_current_rewrite_time_sec:-1

    aof_last_bgrewrite_status:ok

    aof_last_write_status:ok

    # Stats

    total_connections_received:3

    total_commands_processed:113

    instantaneous_ops_per_sec:0

    total_net_input_bytes:4648

    total_net_output_bytes:18026300

    instantaneous_input_kbps:0.00

    instantaneous_output_kbps:0.00

    rejected_connections:0

    sync_full:0

    sync_partial_ok:0

    sync_partial_err:0

    expired_keys:0

    evicted_keys:0

    keyspace_hits:29

    keyspace_misses:3

    pubsub_channels:0

    pubsub_patterns:0

    latest_fork_usec:1232

    migrate_cached_sockets:0

    # Replication

    role:master

    connected_slaves:0

    master_repl_offset:0

    repl_backlog_active:0

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:0

    repl_backlog_histlen:0

    # CPU

    used_cpu_sys:12.56

    used_cpu_user:7.47

    used_cpu_sys_children:0.01

    used_cpu_user_children:0.00

    # Cluster

    cluster_enabled:0

    # Keyspace

    db0:keys=11,expires=0,avg_ttl=0

    db1:keys=1,expires=0,avg_ttl=0

    db2:keys=1,expires=0,avg_ttl=0

    127.0.0.1:6379> bgrewriteaof           //异步执行一个 AOFAppendOnly File)文件重写操作

    Background append only file rewriting started

    127.0.0.1:6379> bgsave                  //在后台异步保存当前数据库的数据到磁盘

    Background saving started

    127.0.0.1:6379> client list                //获取连接到服务器的客户端连接列表

    id=4 addr=127.0.0.1:59487 fd=6 name= age=301 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

    127.0.0.1:6379> command

    127.0.0.1:6379> command count

    127.0.0.1:6379> dbsize                //返回当数据库的key数量

    (integer) 11

    127.0.0.1:6379> flushall                      //删除所有数据库的所有key

    127.0.0.1:6379> flushdb                      //删除当前数据库的所有key

    127.0.0.1:6379> info                            //获取redis服务器的各种信息和统计数值

    127.0.0.1:6379> lastsave                    //返回最近一次redis将数据保存到磁盘上的时间

    127.0.0.1:6379> role                           //返回主从实例所属的角色

    127.0.0.1:6379> save                         //异步保存数据到硬盘

    127.0.0.1:6379> slaveof host port      //将当前服务器转变为指定服务器的从属服务器

    127.0.0.1:6379> sync                         //用于复制的内部命令

    127.0.0.1:6379> config get requirepass

    1) "requirepass"

    2) ""

    127.0.0.1:6379> config set requirepass "abc123"

    OK

    127.0.0.1:6379> exit

    [root@mysql1 src]# ./redis-cli

    127.0.0.1:6379> auth "abc123"

    OK

    客户端最先感知阻塞等Redis超时行为,加入日志监控报警工具可快速定位阻塞问题,同事需要对Redis进程和机器做全面监控。

    阻塞的内在原因:确认主线程是否存在阻塞,检查慢查询等信息,发现不合理使用API或数据结构的情况,如keyssorthgetall等。关注CPU使用率防止单核跑满。当硬盘IO资源紧张时,AOF追加也会阻塞主线程。

    阻塞的外在原因:从CPU竞争、内存交换、网络问题等方面入手排查是否因为系统层面问题引起的阻塞。

    内存使用统计:

    info memory详细解释

    used_memory Redis分配的内存总量

    used_memory_human

    used_memory_rss 从操作系统的角度显示Redis进程占用的物理内存总量

    mem_fragmentation_ratio 内存碎片率,>1时,说明碎片严重。<1时,说明操作系统把Redis内存交换(Swap)到硬盘导致

    内存消耗划分:

    对象内存-Redis占用最大的一块,存储着用户所有的数据

    缓冲内存-客户端缓冲、复制积压缓冲区、AOF缓冲区

    内存碎片

    内存管理:

    设置内存上限,使用maxmemory参数限制最大可用内存

    动态调整内存上限,config set maxmemory 6GB

    内存回收策略:删除到达过期时间的键对象,内存使用达到maxmemory上限时触发内存溢出控制策略

    控制键的数量,过多的键会消耗大量内存

  • 相关阅读:
    Django Rest Framework 视图和路由
    DRF 权限 频率
    DRF 版本 认证
    Serializers 序列化组件
    学DRF之前
    RESTful
    windows下vmware配置nat网络
    python之路——网络编程
    图片上传
    数据库基本设计规范:
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11339813.html
Copyright © 2020-2023  润新知