redis_语法_01

redis

配置

里面可以配置端口与bind的IP,如果需要远程连接的话,把bind那行注释掉即可。

数据类型

主要有以下几种类型:字符串、哈希、列表、集合、有序集合

主要操作

1.字符串主要操作
	*set key value
	*get key
	*mset key1 value1 key2 value2
	*mget key1 key2
	*strlen key #获取key存储的value长度
	*incr/decr key #将key对应的value +1/-1,要求value必须为整数。
	*incrby/decrby key  number#将key对应的value +number/-number,要求value必须为整数。
	
2.键的操作
	*type key #查看key的类型
	*del key	#删除key
	*ttl key	#查看key的过期时间
	*exists key	#查看key是否存在

3.哈希主要操作
*Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
*个人理解就是一张hash表可以存储k-v对,每个hash表最大能存2*31-1个key-value。
	*hset table-name key value  
	*hmset table-name key1 key2
	*hget table-name key
	*hmget table-name key1 key2 #获取多个key值
	*hdel table-name key
	*hgetall table-name #获取key中所有记录。
	*hexists table-name key #是否存在该key
	*hlen table-name #获取该表k-v数量
	*hkeys table-name #获取该表的key值
	*hvals table-name #获取该表的所有value值
3.列表主要操作
*Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 
*这个列表中的值可以是重复的。
	*lpush/rpush list-name value1 value2
	*lpop list-name #弹出列表头元素
	*rpop list-name #弹出列表尾部元素
	*llen list-name #列出列表长度
	*lindex list-name index #获取列表索引值对应的value
	*lrem list-name count value #删除列表中的value值 count 为value的数量。
	*lset list-name index value #设置下标为index的值为value
	
4.集合的主要操作
*Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 
*复杂度:O(1)
	*sadd set-name value1 value2 ... #添加一个或多个元素
	*scard set-name #获取集合的数量
	*sdiff set-name set-name1 #比较两个集合内容,返回不一致的
	*sdiffstore destination set-name set-name1 #返回不一致的并存入destination
	*smembers set-name #获取集合内所有元素
	*sismember set-name value #集合内是否有value元素
	*smove source destination value #将集合source value 移到 destination
	*spop set-name #移除并返回集合的一个随机元素
	*srem set-name value #删除集合中元素
	
5.有序集合
*每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
	*zadd jh-table score1 value1 [score2 value2...] #增加s-v 到jh-table中
	*zcard jh-table	#计算数量
	*zscore jh-table value1 #获取value1的 score值
	*zcount jh-table min max #获取score在min和max中的集合的个数
	*zrange jh-table start stop #列出范围在start-stop内的元素
	

发布/订阅

*subsribe channel #订阅频道
	*publish channel message #向指定频道发送信息
	*unsubscribe channel 

python连接redis

#coding=utf-8

	'''
	Created on 2018年6月11日

	@author: BH Wong
	'''
	import redis

	class redisHelper():
		def __init__(self,host,port):
			self.host = host
			self.port = port
			
		def connect(self):
			r = redis.Redis(host = self.host,port = self.port,db = 0)
			return r
		
		def setRedis(self,conn,key,value):
			conn.set(key,value)
			
		def getRedis(self,conn,key):
			return conn.get(key)

	if __name__ == '__main__':
		redisDemo = redisHelper('192.168.164.135',6379)
		r = redisDemo.connect()
		redisDemo.setRedis(r, 'name', 'wangran')
		res = redisDemo.getRedis(r, 'name')
		print(res)

 

<think>好的,用户之前已经询问过如何配置VictoriaMetrics来监控Redis的告警模板,现在他们进一步要求针对具体的五个指标设置告警规则模板,并且每个指标都有推荐的阈值。我需要根据用户提供的指标和阈值来生成对应的vmalert格式的告警规则。 首先,我需要确认用户提供的指标和阈值是否正确以及如何在VictoriaMetrics中正确表达。用户提供的指标包括运行时间、当前连接数、内存使用量、拒绝连接数和命令延迟,每个都有不同的阈值要求。接下来,我需要将这些指标和阈值转化为PromQL表达式,并确保语法正确。 对于第一个指标redis_uptime_in_seconds,推荐阈值是小于60秒,这意味着如果Redis的运行时间突然小于60秒,可能发生了重启。这时候告警规则应该检测该值是否小于60。表达式相对简单,直接比较即可。 第二个指标是redis_connected_clients,阈值是超过maxclients的80%。这里需要注意的是maxclients是Redis的配置参数,可能需要从另一个指标获取,比如redis_config_maxclients。因此表达式应该是当前连接数除以maxclients的值是否超过0.8,并且需要考虑分母可能为零的情况,避免除零错误,所以需要使用and redis_config_maxclients > 0来确保分母有效。 第三个指标是redis_memory_used_bytes,阈值是超过maxmemory的90%。同样,maxmemory可能需要从redis_config_maxmemory获取,或者如果未配置,该值可能为零。因此表达式需要比较内存使用量是否超过maxmemory的90%,同时确保maxmemory大于零,否则会导致误报。 第四个指标是redis_rejected_connections_total,阈值是大于0。这个指标是一个计数器,直接检查其值是否大于0即可,但需要注意该计数器是累计值,所以可能需要使用increase函数来检测最近是否有新的拒绝连接。不过用户可能希望只要拒绝连接数有增加就触发告警,所以直接检查值是否大于0可能不够准确,但根据用户的需求,这里直接按用户提供的阈值来配置。 第五个指标是redis_commands_duration_seconds,要求P99延迟超过1秒。这里需要使用直方图的quantile函数来计算99百分位的延迟。表达式应该是计算过去5分钟内P99的延迟是否超过1秒,并且需要确保有足够的数据点,所以加上> 1秒的条件。 接下来,我需要将这些表达式整合到vmalert的告警规则模板中,每个告警规则需要包含alert名称、expr表达式、for持续时间、labels和annotations。同时,需要确保每个规则的注释清晰,能够说明问题,并包含实例标签。 在编写过程中,还需要注意PromQL的正确性,比如使用正确的指标名称、标签以及函数。例如,redis_config_maxclients和redis_config_maxmemory可能需要确认是否确实由Redis Exporter提供,如果用户使用的Exporter版本不同,指标名称可能会有所变化,需要用户根据实际情况调整。 另外,关于拒绝连接数的处理,如果该指标是累计值,直接检查值是否大于0可能不太合适,因为一旦有拒绝连接,该指标会一直大于0,导致告警持续触发。正确的方法应该是检测在最近一段时间内是否有新增的拒绝连接,比如使用increase(redis_rejected_connections_total[5m]) > 0,但用户提供的阈值是>0,因此可能需要与用户确认是否需要调整。不过按照用户的要求,这里还是按照给定的阈值来配置。 最后,还需要提醒用户根据实际环境调整参数,例如for的持续时间、标签的严重级别,以及确保指标名称与Exporter实际暴露的指标一致。可能还需要添加额外的条件,比如排除实例或环境的特定标签,确保告警的准确性。 总结来说,步骤是:将每个指标和阈值转化为正确的PromQL表达式,构建告警规则的结构,检查每个表达式的正确性,并添加必要的注释和标签,最后给出验证方法和注意事项,帮助用户正确应用这些告警规则。</think>以下是针对您提供的Redis指标及阈值定制的 **vmalert告警规则模板**,采用PromQL语法: ```yaml groups: - name: Redis-Custom-Alerts rules: # 规则1: Redis实例意外重启 - alert: RedisUptimeTooLow expr: redis_uptime_in_seconds < 60 # 运行时间小于60秒可能发生了重启 for: 1m labels: severity: critical annotations: summary: "Redis实例异常重启 ({{ $labels.instance }})" description: "运行时间仅有{{ $value | humanize }}秒" # 规则2: 连接数超过maxclients的80% - alert: RedisHighClientConnections expr: | (redis_connected_clients / redis_config_maxclients) > 0.8 and redis_config_maxclients > 0 # 避免除零错误 for: 5m labels: severity: warning annotations: summary: "Redis连接数接近上限 ({{ $labels.instance }})" description: "当前连接数占比: {{ $value | humanizePercentage }}" # 规则3: 内存使用超过maxmemory的90% - alert: RedisMemoryNearLimit expr: | (redis_memory_used_bytes / redis_config_maxmemory) > 0.9 and redis_config_maxmemory > 0 # 确保maxmemory已配置 for: 10m labels: severity: critical annotations: summary: "Redis内存使用接近上限 ({{ $labels.instance }})" description: "当前使用率: {{ $value | humanizePercentage }}" # 规则4: 存在拒绝连接 - alert: RedisRejectedConnections expr: redis_rejected_connections_total > 0 for: 2m labels: severity: warning annotations: summary: "Redis出现拒绝连接 ({{ $labels.instance }})" description: "累计拒绝连接数: {{ $value }}" # 规则5: P99命令延迟过高 - alert: RedisHighCommandLatency expr: | histogram_quantile(0.99, sum by(le) (rate(redis_commands_duration_seconds_bucket[5m])) ) > 1 for: 5m labels: severity: critical annotations: summary: "Redis命令延迟过高 ({{ $labels.instance }})" description: "P99延迟: {{ $value | humanizeDuration }}" ``` --- ### 关键配置说明: 1. **阈值调整技巧**: - 内存/连接数公式中的`0.8`和`0.9`可替换为`$threshold`变量实现动态配置 - 时敏性告警(如重启)适当缩短`for`持续时间 2. **指标依赖注意**: - `redis_config_maxclients`和`redis_config_maxmemory`需要确认Exporter是否暴露这些配置指标 - 若未获取到配置参数,可用固定值替代: ```promql redis_connected_clients > 1000 # 假设maxclients=1250 ``` 3. **进阶优化建议**: ```yaml # 添加排除维护窗口的逻辑 expr: | redis_memory_used_bytes / redis_config_maxmemory > 0.9 unless ON(instance) maintenance{job="redis"} == 1 ``` 4. **验证方法**: ```bash # 直接查询指标验证阈值逻辑 curl -s http://vm:8428/api/v1/query?query=redis_uptime_in_seconds ``` 建议先通过 **VMUI** 的 `http://<victoriametrics>:8480/` 界面测试PromQL表达式,再写入告警规则文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值