Redis使用总结

 

  • KEYS

KEYS pattern

查找所有符合给定模式 pattern 的 key 。

KEYS * 匹配数据库中所有 key 。

KEYS h?llo 匹配 hello , hallo 和 hxllo 等。

KEYS h*llo 匹配 hllo 和 heeeeello 等。

KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。

特殊符号用 \ 隔开

KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。现网环境使用keys会造成线程阻塞,不推荐使用

可用版本:

>= 1.0.0

时间复杂度:

O(N), N 为数据库中 key 的数量。

 

  • 删除Redis大键注意事项

Redis删除大的集合键的耗时, 测试估算,可参考;和硬件环境、Redis版本和负载等因素

hash类型100万数据,耗时1s


delete large hash key从Redis2.8版本开始支持SCAN命令,通过m次时间复杂度为O(1)的方式,遍历包含n个元素的大key.
这样避免单个O(n)的大命令,导致Redis阻塞。 这里删除大key操作的思想也是如此。

HSCAN test_key 0 MATCH ** COUNT 100

COUNT 数量过大,也会阻塞线程,一个大的redis库中很多命令会造成阻塞(redis单线程),例如hgetall、keys,delete大key,所以生产环境执行redis脚本必须非常小心

通过hscan命令,每次获取100个字段,再用hdel命令,每次删除1个字段。每次循环休眠一秒

注意:python环境需要安装redis模块


Python代码:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import redis
import time
import sys

print(sys.argv[1])
COUNT = 100

conn = redis.StrictRedis(host=sys.argv[2], port=sys.argv[3])

key_to_be_deleted = sys.argv[1]

def del_key(redis_conn, hash_key, del_count):
    cursor = '0'
    while cursor != 0:
        pl = redis_conn.pipeline()
        cursor, data =  redis_conn.hscan(hash_key, cursor=cursor, count=del_count)
        for item in data.items():
            pl.hdel(hash_key, item[0])
        pl.execute()
        time.sleep(1)

def main():
    del_key(conn, key_to_be_deleted, COUNT)

if __name__ == '__main__':
    main()

 

执行脚本 :python test.py  test 127.0.0.1 6379

 

字符串匹配删除

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import redis
import time
import sys

print(sys.argv[1])
COUNT = 100

conn = redis.StrictRedis(host=sys.argv[2], port=sys.argv[3])

key_to_be_deleted = sys.argv[1]

def del_key(redis_conn, hash_key, del_count):
    for key in redis_conn.scan_iter(match = hash_key,count = del_count):
        conn.delete(hash_key)
        time.sleep(0.01)

def main():
    del_key(conn, key_to_be_deleted, COUNT)

if __name__ == '__main__':
    main()

强制关闭Redis快照导致不能持久化

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

./redis-cli

127.0.0.1:6379> config set stop-writes-on-bgsave-error no

 

以上是在使用redis过程中遇到的坑

参考文档

https://blog.csdn.net/wsliangjian/article/details/52329320

http://redisdoc.com/key/keys.html#keys

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值