千家信息网

SaltStack源码分析之使用Redis模块

发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,Redis模块路径/usr/lib/python2.6/site-packages/salt/modules/redismod.pyRedis模块会首先检查是否安装有Redis的Python驱动# -
千家信息网最后更新 2024年10月25日SaltStack源码分析之使用Redis模块

Redis模块路径

/usr/lib/python2.6/site-packages/salt/modules/redismod.py

Redis模块会首先检查是否安装有Redis的Python驱动

# -*- coding: utf-8 -*-'''Module to provide redis functionality to Salt.. versionadded:: 2014.7.0:configuration: This module requires the redis python module and uses the    following defaults which may be overridden in the minion configuration:.. code-block:: yaml    redis.host: 'localhost'    redis.port: 6379    redis.db: 0    redis.password: None'''# Import third party libstry:    import redis    HAS_REDIS = Trueexcept ImportError:    HAS_REDIS = False__virtualname__ = 'redis'
def __virtual__():    '''    Only load this module if redis python module is installed    '''    if HAS_REDIS:        return __virtualname__    else:        return False

只有当Redis的Python驱动安装了才返回SaltStack的Redis模块名称redis

def _connect(host=None, port=None, db=None, password=None):    '''    Returns an instance of the redis client    '''    if not host:        host = __salt__['config.option']('redis.host')    if not port:        port = __salt__['config.option']('redis.port')    if not db:        db = __salt__['config.option']('redis.db')    if not password:        password = __salt__['config.option']('redis.password')    return redis.StrictRedis(host, port, db, password)

如果没有指定Redis实例的IP,端口和DB名称以及密码就去读取配置文件。这里使用redis的Python驱动连接Redis



def bgrewriteaof(host=None, port=None, db=None, password=None):    '''    Asynchronously rewrite the append-only file    CLI Example:    .. code-block:: bash        salt '*' redis.bgrewriteaof    '''    server = _connect(host, port, db, password)    return server.bgrewriteaof()

异步重写AOF文件


测试

$ sudo salt 'jialebi-qa-server' redis.bgrewriteaof 127.0.0.1 6379 0 jialebi-qa-server:    True
def bgsave(host=None, port=None, db=None, password=None):    '''    Asynchronously save the dataset to disk    CLI Example:    .. code-block:: bash        salt '*' redis.bgsave    '''    server = _connect(host, port, db, password)    return server.bgsave()

异步保存数据到磁盘

测试:

$ sudo salt 'jialebi-qa-server' redis.bgsave 127.0.0.1 6379 0 jialebi-qa-server:    True
def config_get(pattern='*', host=None, port=None, db=None, password=None):    '''    Get redis server configuration values    CLI Example:    .. code-block:: bash        salt '*' redis.config_get        salt '*' redis.config_get port    '''    server = _connect(host, port, db, password)    return server.config_get(pattern)

获取配置信息


测试:

$ sudo salt 'jialebi-qa-server' redis.config_get '*' 127.0.0.1 6379 0 jialebi-qa-server:    ----------    activerehashing:        yes    appendfsync:        everysec    appendonly:        no    auto-aof-rewrite-min-size:        67108864    auto-aof-rewrite-percentage:        100    bind:        127.0.0.1    client-output-buffer-limit:        normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60    daemonize:        yes    databases:        16    dbfilename:        dump.rdb    dir:        /data/app_data/redis/data    hash-max-ziplist-entries:        512    hash-max-ziplist-value:        64    list-max-ziplist-entries:        512    list-max-ziplist-value:        64    logfile:        /data/app_data/redis/logs/redis.log    loglevel:        notice    lua-time-limit:        5000    masterauth:            maxclients:        10000    maxmemory:        0    maxmemory-policy:        volatile-lru    maxmemory-samples:        3    no-appendfsync-on-rewrite:        no    pidfile:        /var/run/redis.pid    port:        6379    rdbchecksum:        yes    rdbcompression:        yes    repl-ping-slave-period:        10    repl-timeout:        60    requirepass:            save:        900 1 300 10 60 10000    set-max-intset-entries:        512    slave-priority:        100    slave-read-only:        yes    slave-serve-stale-data:        yes    slaveof:            slowlog-log-slower-than:        10000    slowlog-max-len:        128    stop-writes-on-bgsave-error:        yes    timeout:        0    unixsocket:            unixsocketperm:        0    watchdog-period:        0    zset-max-ziplist-entries:        128    zset-max-ziplist-value:        64
$ sudo salt 'jialebi-qa-server' redis.config_get 'maxmemory' 127.0.0.1 6379 0 jialebi-qa-server:    ----------    maxmemory:        0
def config_set(name, value, host=None, port=None, db=None, password=None):    '''    Set redis server configuration values    CLI Example:    .. code-block:: bash        salt '*' redis.config_set masterauth luv_kittens    '''    server = _connect(host, port, db, password)    return server.config_set(name, value)

设置某个参数的值


测试

$ sudo salt 'jialebi-qa-server' redis.config_set 'maxmemory' 300000000  127.0.0.1 6379 0 jialebi-qa-server:    True
def dbsize(host=None, port=None, db=None, password=None):    '''    Return the number of keys in the selected database    CLI Example:    .. code-block:: bash        salt '*' redis.dbsize    '''    server = _connect(host, port, db, password)    return server.dbsize()

返回选择库的key的数量

测试:

$ sudo salt 'jialebi-qa-server' redis.dbsize 127.0.0.1 6379 3jialebi-qa-server:    12502
def delete(*keys, **connection_args):    '''    Deletes the keys from redis, returns number of keys deleted    CLI Example:    .. code-block:: bash        salt '*' redis.delete foo    '''    # Get connection args from keywords if set    conn_args = {}    for arg in ['host', 'port', 'db', 'password']:        if arg in connection_args:            conn_args[arg] = connection_args[arg]    server = _connect(**conn_args)    return server.delete(*keys)

删除一个KEY

def exists(key, host=None, port=None, db=None, password=None):    '''    Return true if the key exists in redis    CLI Example:    .. code-block:: bash        salt '*' redis.exists foo    '''    server = _connect(host, port, db, password)    return server.exists(key)

检查一个KEY是否存在


测试

$ sudo salt 'jialebi-qa-server' redis.exists foo  127.0.0.1 6379 0jialebi-qa-server:    True


def expire(key, seconds, host=None, port=None, db=None, password=None):    '''    Set a keys time to live in seconds    CLI Example:    .. code-block:: bash        salt '*' redis.expire foo 300    '''    server = _connect(host, port, db, password)    return server.expire(key, seconds)

设置一个KEY的过期时间


测试:

$ sudo salt 'jialebi-qa-server' redis.expire foo 300 127.0.0.1 6379 0 jialebi-qa-server:    True


def expireat(key, timestamp, host=None, port=None, db=None, password=None):    '''    Set a keys expire at given UNIX time    CLI Example:    .. code-block:: bash        salt '*' redis.expireat foo 1400000000    '''    server = _connect(host, port, db, password)    return server.expireat(key, timestamp)

设置一个KEY在给定的时间过期

$ sudo salt 'jialebi-qa-server' redis.expireat foo 1431532800 127.0.0.1 6379 0 jialebi-qa-server:    True



def flushall(host=None, port=None, db=None, password=None):    '''    Remove all keys from all databases    CLI Example:    .. code-block:: bash        salt '*' redis.flushall    '''    server = _connect(host, port, db, password)    return server.flushall()

清空所有数据库


def flushdb(host=None, port=None, db=None, password=None):    '''    Remove all keys from the selected database    CLI Example:    .. code-block:: bash        salt '*' redis.flushdb    '''    server = _connect(host, port, db, password)    return server.flushdb()

清楚选定库的所有KEY


def get_key(key, host=None, port=None, db=None, password=None):    '''    Get redis key value    CLI Example:    .. code-block:: bash        salt '*' redis.get_key foo    '''    server = _connect(host, port, db, password)    return server.get(key)

获取一个KEY的值

$ sudo salt 'jialebi-qa-server' redis.get_key foo 127.0.0.1 6379 0 jialebi-qa-server:    test



def hget(key, field, host=None, port=None, db=None, password=None):    '''    Get specific field value from a redis hash, returns dict    CLI Example:    .. code-block:: bash        salt '*' redis.hget foo_hash bar_field    '''    server = _connect(host, port, db, password)    return server.hget(key, field)

获取一个Redis哈希的指定字段的值


测试:

$ sudo salt 'jialebi-qa-server' redis.hget myhash field1 127.0.0.1 6379 0 jialebi-qa-server:    foo


def hgetall(key, host=None, port=None, db=None, password=None):    '''    Get all fields and values from a redis hash, returns dict    CLI Example:    .. code-block:: bash        salt '*' redis.hgetall foo_hash    '''    server = _connect(host, port, db, password)    return server.hgetall(key)

获取一个哈希的所有字段


测试:

$ sudo salt 'jialebi-qa-server' redis.hgetall myhash 127.0.0.1 6379 0 jialebi-qa-server:    ----------    field1:        foo


def info(host=None, port=None, db=None, password=None):    '''    Get information and statistics about the server    CLI Example:    .. code-block:: bash        salt '*' redis.info    '''    server = _connect(host, port, db, password)    return server.info()

获取服务器信息

$ sudo salt 'jialebi-qa-server' redis.info 127.0.0.1 6379 0 jialebi-qa-server:    ----------    aof_current_rewrite_time_sec:        -1    aof_enabled:        0    aof_last_bgrewrite_status:        ok    aof_last_rewrite_time_sec:        2    aof_rewrite_in_progress:        0    aof_rewrite_scheduled:        0    arch_bits:        64    blocked_clients:        0    client_biggest_input_buf:        0    client_longest_output_list:        0    connected_clients:        3    connected_slaves:        0    db0:        ----------        expires:            1        keys:            3    db1:        ----------        expires:            0        keys:            10    db2:        ----------        expires:            0        keys:            357    db3:        ----------        expires:            0        keys:            12502    db4:        ----------        expires:            0        keys:            5173    evicted_keys:        0    expired_keys:        21366    gcc_version:        4.4.7    instantaneous_ops_per_sec:        0    keyspace_hits:        11673041    keyspace_misses:        115559    latest_fork_usec:        21412    loading:        0    lru_clock:        226477    mem_allocator:        jemalloc-3.2.0    mem_fragmentation_ratio:        0.46    multiplexing_api:        epoll    os:        Linux 2.6.32-431.1.2.0.1.el6.x86_64 x86_64    process_id:        1481    pubsub_channels:        0    pubsub_patterns:        0    rdb_bgsave_in_progress:        0    rdb_changes_since_last_save:        0    rdb_current_bgsave_time_sec:        -1    rdb_last_bgsave_status:        ok    rdb_last_bgsave_time_sec:        1    rdb_last_save_time:        1428327615    redis_git_dirty:        0    redis_git_sha1:        0    redis_mode:        standalone    redis_version:        2.6.9    rejected_connections:        0    role:        master    run_id:        62ec3260542f9bdaa1ead635b1ab4cda55991fd6    tcp_port:        6379    total_commands_processed:        14470609    total_connections_received:        1100003    uptime_in_days:        194    uptime_in_seconds:        16781078    used_cpu_sys:        94220.77    used_cpu_sys_children:        1863.2    used_cpu_user:        32682.53    used_cpu_user_children:        6544.72    used_memory:        65337760    used_memory_human:        62.31M    used_memory_lua:        31744    used_memory_peak:        65875152    used_memory_peak_human:        62.82M    used_memory_rss:        30359552



def keys(pattern='*', host=None, port=None, db=None, password=None):    '''    Get redis keys, supports glob style patterns    CLI Example:    .. code-block:: bash        salt '*' redis.keys        salt '*' redis.keys test*    '''    server = _connect(host, port, db, password)    return server.keys(pattern)

获取所有的KEY

测试:

$ sudo salt 'jialebi-qa-server' redis.keys '*'  127.0.0.1 6379 0 jialebi-qa-server:    - myhash    - foo    - foot$ sudo salt 'jialebi-qa-server' redis.keys 'foo*'  127.0.0.1 6379 0 jialebi-qa-server:    - foo    - foot


def key_type(key, host=None, port=None, db=None, password=None):    '''    Get redis key type    CLI Example:    .. code-block:: bash        salt '*' redis.type foo    '''    server = _connect(host, port, db, password)    return server.type(key)


获取一个KEY的类型

测试:

$ sudo salt 'jialebi-qa-server' redis.key_type foo 127.0.0.1 6379 0 jialebi-qa-server:    string$ sudo salt 'jialebi-qa-server' redis.key_type myhash 127.0.0.1 6379 0 jialebi-qa-server:    hash



def lastsave(host=None, port=None, db=None, password=None):    '''    Get the UNIX time in seconds of the last successful save to disk    CLI Example:    .. code-block:: bash        salt '*' redis.lastsave    '''    server = _connect(host, port, db, password)    return int(server.lastsave().strftime("%s"))

获取指定库上次保存数据到磁盘的UNIX时间戳,以秒计算

这里使用strftime()将一个时间元组转换成秒

In [27]: import time,redisIn [28]: conn=redis.StrictRedis('127.0.0.1',6379,0)In [29]: conn.lastsave()Out[29]: datetime.datetime(2015, 4, 7, 10, 26, 57)In [30]: conn.lastsave().strftime('%s')Out[30]: '1428373617'


测试:

$ sudo salt 'jialebi-qa-server' redis.lastsave 127.0.0.1 6379 0jialebi-qa-server:    1428374519


def llen(key, host=None, port=None, db=None, password=None):    '''    Get the length of a list in Redis    CLI Example:    .. code-block:: bash        salt '*' redis.llen foo_list    '''    server = _connect(host, port, db, password)    return server.llen(key)

获取一个Redis列表的长度


测试:

$ sudo salt 'jialebi-qa-server' redis.llen mylist 127.0.0.1 6379 0jialebi-qa-server:    3


0