SaltStack源码分析之使用Redis模块
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Redis模块路径/usr/lib/python2.6/site-packages/salt/modules/redismod.pyRedis模块会首先检查是否安装有Redis的Python驱动# -
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
dream的手机版服务器编号
济康互联网科技(南京)有限
数据库加密技术的优点
互联网科技公司招聘兼职吗
像素世界服务器
上海机旁备件管理软件开发
服务器能不能再建虚拟机
家具数据库需求文档模板
党政机关网络安全意识
看门狗大楼网络安全路由器
一个数据库必须包含哪些文件
女生学西点好还是软件开发好
联想集团网络安全
服务器链接域名
数据库异常死机
阿克苏云诚互联网科技有限公司
网安与网络安全
php注册源码数据库教程
数据库切日
国科中创山东互联网科技有限公司
大专学网络技术出来找什么工作
滕迅的服务器投资
华三网络技术视频
计算机网络技术实训脚本
数据库应用技术知识点总结
滁州安卓软件开发外包
服务器4个网口都干什么用
网络安全指通过采取
中策网络技术有限公司
香港服务器可做黄