redis产生随机数据

摘要:
choicefromcredisclusterimportStrictRedisClusterDEBUG=1CHARACTERPOOL='abcdefghijlmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'defgetRedisCluster客户端():startup_nodes=[{'主机':{'端口':rc=无):

  由于需要研究redis cluster集群监控,需要产生随机数据,顾写此set和list随机数据生成代码。

直接贴代码

# coding: utf-8
# author Elephanyu
from abc import abstractmethod
from random import randint, choice

from rediscluster import StrictRedisCluster

DEBUG = 1
CHARACTERPOOL = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

def getRedisClusterClient():
    startup_nodes = [
        {
            'host': '192.168.8.28',
            'port': '7000'
        },
        {
            'host': '192.168.8.28',
            'port': '7001'
        },
        {
            'host': '192.168.8.28',
            'port': '7002'
        },
        {
            'host': '192.168.8.29',
            'port': '7003'
        },
        {
            'host': '192.168.8.29',
            'port': '7004'
        },
        {
            'host': '192.168.8.29',
            'port': '7005'
        }
    ]
    rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
    return rc

class RedisRandom(object):
    num = 100
    strlen = 100
    cleannum = 0
    recyclnum = 0
    recyclemaxnum = num * 10

    def __init__(self, rc=None):
        if rc == None:
            rc = getRedisClusterClient()
        self.rc = rc

    @abstractmethod
    def _generate(self, exmin=None):
        pass

    @abstractmethod
    def _clean(self):
        pass

    def generate(self, num=None, strlen=None, exmin=None):
        if num:
            self.num = num
        if strlen:
            self.strlen = strlen
        self._generate(exmin=exmin)

    def clean(self, num=None):
        self.cleannum = 0
        self.recyclnum = 0
        if num:
            self.num = num
            self.recyclemaxnum = num * 10
        for i in xrange(self.num):
            if self.recyclnum > self.recyclemaxnum:
                break
            else:
                while True:
                    if self.recyclnum > self.recyclemaxnum:
                        break
                    self.recyclnum += 1
                    ret = self._clean()
                    if ret:
                        self.cleannum += 1
        return self.cleannum

    def flush(self):
        self.rc.flushall()
        self.rc.flushdb()

    def _getRandomStr(self, num=20):
        rstr = ''
        for i in xrange(num):
            rstr += choice(CHARACTERPOOL)
        return rstr

    def _getRandomSecond(self, min):
        num = randint(1, min)
        return num * 60

class StringRedisRandom(RedisRandom):
    def _generate(self, exmin=None):
        if exmin is None:
            for i in xrange(1, self.num):
                self.rc.set(self._getRandomStr(2), self._getRandomStr(self.strlen))
        else:
            for i in xrange(1, self.num):
                self.rc.set(self._getRandomStr(2), self._getRandomStr(self.strlen), ex=self._getRandomSecond(exmin))

    def _clean(self):
        key = self._getRandomStr(2)
        if self.rc.get(key):
            ret = self.rc.delete(key)
            if ret:
                if DEBUG:
                    print '{}: del string[{}]'.format(self.cleannum, key)
                return True
        return False

class ListRedisRandom(RedisRandom):
    def _generate(self, exmin=None):
        for i in xrange(1, self.num):
            self.rc.lpush(self._getRandomStr(1), self._getRandomStr(self.strlen))

    def _clean(self):
        key = self._getRandomStr(1)
        llen = self.rc.llen(key)
        if llen > 0:
            ret = self.rc.lpop(key)
            if ret:
                if DEBUG:
                    print '{}: pop list {}[{}], len now[{}]'.format(self.cleannum, key, ret, llen - 1)
                return True
        return False

if __name__ == '__main__':
    rc = getRedisClusterClient()
    srandom = StringRedisRandom(rc=rc)
    srandom.generate(num=5, strlen=10)
    srandom.clean(num=1000)
    srandom.clean(num=1000)
    lrandom = ListRedisRandom(rc=rc)
    lrandom.generate(num=5, strlen=5)
    lrandom.clean(num=100)
    lrandom.clean(num=100)

# result
0: del string[VP]
1: del string[Tz]
2: del string[GQ]
3: del string[Ci]
0: pop list b[CpiRH], len now[0]
1: pop list i[aPMNy], len now[0]
2: pop list A[JUHTB], len now[0]
3: pop list p[TPJWf], len now[0]

免责声明:文章转载自《redis产生随机数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS使用TestFlight进行内部和外部人员测试Firefox在新标签页打开“书签”和“搜索栏”(无需插件)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

一. 抽象类(接口类)   与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化.   从设计角度去看, 如果类是从现实对象抽象而来的, 那么抽象类就是基于类抽象而来的。     从实现角度来看, 抽象类与普通类的不同之处在于: 抽象类中有抽象方法, 该类不能被实例化,...

Django:使用模态框新增数据,成功后提示“提交成功”,并刷新表格bootstrap-table数据

废话不说先看图:    代码实现:   前台代码: {% load staticfiles %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>项目...

wx.setStorage、wx.getStorage和wx.getStorageSync

Page({ data: { testnum:""//设置测试参数 }, test:function(){ var Num = this.data.testnum; wx.setStorage({//存储到本地 key:"testNum", data:Num }) } }) Page...

Odoo 接口

1. 很多人还是习惯使用restful格式进行接口操作,但odoo已默认jsonrpc,所以需要专门写一个装饰器 def json_response(func): """返回去除封装的JSON""" @wraps(func) def decorate(*args, **kwargs): request.__raw_j...

d3的常用方法和数据类型

1. 选择集自身属性 1. selection.empty() 选择集是否为空,为空返回true,否则返回false 2. selection.node() 返回第一个非空元素,无则返回null 3. selection.size() 返回选择集中的元素个数 2. 选择集元素属性 1. attr 设置属性 2. classed 设置class 3. sty...

mysql增删改和学生管理sql

importpymysql #2.建连 conn = pymysql.connect("localhost","root",'root','李森') print(conn) #3.获取游标 cur =conn.cursor() #4.增 sql="insert into student_1 values(default,%s,%s,%s,%s)"cur.e...