SaltStack源码分析之使用Redis模块
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Redis模块路径/usr/lib/python2.6/site-packages/salt/modules/redismod.pyRedis模块会首先检查是否安装有Redis的Python驱动# -
千家信息网最后更新 2026年11月02日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
测试
时间
模块
数据
驱动
信息
名称
字段
文件
磁盘
哈希
检查
配置
清楚
参数
只有
实例
密码
数据库
数量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网新科技
南京欣网互联网络科技有限公司
科技股互联网
青岛互联网科技公司
万易互联网科技有限公司
迪茉互联网科技
未来的互联网科技
时间互联网络科技
卓越科技互联网 招聘
海南科技产业互联网平台
银川新华互联网科技学校地址
阿里巴巴算科技企业还是互联网
互联网科技与管理
国大互联网教育科技有限公司工作
长沙茂晟互联网科技有限公司
南京一网一红互联网科技有限公司
普陀区互联网教育科技管理办法
科技信息时代互联网发展
科技互联网公司两年变化
银川新华互联网科技学校招聘
互联网科技产业
互联网最新的科技有限公司
礼当家互联网科技
互联网科技股有哪些
崇明区互联网教育科技诚信经营
徐州市互联网科技有限公司
互联网金融科技元年
浙南科技城互联网大厦招聘
全球科技与互联网公司市值变化
互联网领先科技成果宣传视频