SaltStack源码分析之使用Redis模块
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,Redis模块路径/usr/lib/python2.6/site-packages/salt/modules/redismod.pyRedis模块会首先检查是否安装有Redis的Python驱动# -
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
西安石油大学数据库实验
怎么修改修改数据库文件
软件开发转销售设备
遇到网络安全事件时
电脑怎么连接另一个服务器
互联网科技瞭望
《通信网络安全防护办法》
聊城高校党建软件开发公司
珠海网络安全教育基地方案
如何增加数据库表的行
简述空间数据库技术的发展
四川网络安全前景
vb工控软件开发
潮流软件开发过程价钱
mysql数据库求和函数
网络安全法 第28条
我是计算机网络技术专业
软件开发技术服务专票
服务器需要做的安全防护
数据库开发系统案例
网络安全进入大学生教育的必要性
哪里可以学习网络安全课程
网络安全记录怎么记录
汕尾专业软件开发供应商家
关于校园网络安全的手抄报
新加坡服务器游戏充值
戴尔服务器更换电池后不开机
泰为软件开发有限公司
专升本数据库索引
计算机网络技术目标职业理由