python之实现缓存环

看了CodeBokk 第二版通过python实现缓存环,吸收之后记录下,方便以后查阅。

任务:

  定义一个固定尺寸的缓存,当它填满的时候,新加入的元素会覆盖第一个(最老的)元素。这种数据结构在存储日志和历史信息时非常有用。

解决方案:

  当缓存填满时,及时地修改缓存对象,使其从为填满的缓存类变成填满的缓存类。

实现代码如下:

  

 1 class RingClass:
 2     """
 3     定义一个未填满的缓存类
 4     """
 5     def __init__(self, size_max):
 6         self.size = size_max
 7         self.data = []
 8
 9     class __Full:
10     “”“
11     定义一个填满缓存时处理
12    ”“”
13         def append(self, x):
14             self.data[self.cur] = x
15             self.cur = (self.cur+1) % self.size
16
17         def tolist(self):
18             return self.data[self.cur:]+self.data[:self.cur]
19
20     def append(self, x):
21         self.data.append(x)
22         if len(self.data) == self.size:
23             self.cur = 0
24             self.__class__ = self.__Full  """永久性的将当前类切换填满的缓存类,关键部分"""
25     def tolist(self):
26         return self.data

用法示例代码如下:

  

 1 if __name__ == "__main__":
 2     x = RingBuff(5)
 3     x.append(1);x.append(2);x.append(3);x.append(4)
 4     print x.__class__,x.tolist()
 5     x.append(5)
 6     print x.__class__,x.tolist()
 7     x.append(6)
 8     print x.__class__, x.data, x.tolist()
 9     x.append(7);x.append(8);x.append(9):x.append(10)
10     print x.__class__, x.data,x.tolist()

最后的结果示例如下:

由于缓存环有固定大小,当填满的时候,加入新元素会覆盖到它持有的最旧的元素,。通过self.__class__ = self.__Full 完成这个转变。在实际应用中还是很有用处的。记录下,方便以后查阅!

时间: 2024-10-31 03:38:51

python之实现缓存环的相关文章

第二百九十七节,python操作redis缓存-List类型,可以理解为列表

python操作redis缓存-List类型,可以理解为列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图:

Python代码块缓存、小数据池

引子 前几天遇到了这样一道Python题目:a='123',b='123',下列哪个是正确的? A. a != b B. a is b C. a==123 D. a + b =246 正确答案是B 是的,我选错了,我当时觉得没有正确答案,原因是我当时已经知道Python中 == 与 != 是比较两边的数值是否相等,很显然 a==b,我也知道 is 比较的是两边的内存地址是否相同,而内存地址是否相同是通过比较 id(a) 是否等于id(b)来知道的,而我想当然地认为a和b是两个不一样的变量,内存地

10行Python代码解决约瑟夫环(模拟)

http://blog.csdn.net/dengyaolongacmblog/article/details/39208675 1 #!/usr/bin/env python 2 # coding: utf-8 3 4 import os 5 import sys 6 import string 7 import operator 8 import re 9 10 def josephus(n,k): 11 link=range(1,n+1) 12 ind=0 13 for loop_i in

【Python初级】006-循环语句

循环语句-if-for-while 目录: 1:条件执行和if语句 ---------条件执行和if语句 ---------else子句 ---------elif子句 ---------嵌套代码块 ---------更复杂的条件 ---------断言 2:循环 ---------while循环 ---------for循环 ---------循环遍历字典元素 ---------迭代工具 ---------跳出循环 ---------循环中的else子句 ---------列表表推导式----

基于python+mysql+redis缓存设计与数据库关联数据处理

1.添加表 CREATE TABLE tb_signin( id INT, user_name VARCHAR(10), signin_num INT , signin_time DATETIME , gold_coin INT ); INSERT INTO tb_signin VALUES(1, 'ma', 0, NULL, 0), (2, 'he', 0, NULL, 0), (3, 'yu', 0, NULL, 0), (4, 'hai', 0, NULL, 0), (5, 'fang',

Python菜鸟之路:Python基础-操作缓存memcache、redis

一.搭建memcached和redis 略,自己去百度吧 二.操作Mmecached 1. 安装API python -m pip install python-memcached 2. 启动memcached memcached -d -u root -p 12000 -m 50 memcached -d -u root -p 12001 -m 50 memcached -d -u root -p 12002 -m 50参数说明:     -d 是启动一个守护进程     -m 是分配给Mem

python操作Redis缓存

一.Redis的安装 xshell连上服务器,依次输入以下代码: wget http://download.redis.io/releases/redis-3.0.6.tar.gz tar xzf redis-3.0.6.tar.gz cd redis-3.0.6 make 如果不巧发生以下截图中的错误: 说明未安装gcc,如果是centos系统,输入:yum install gcc安装gcc即可,然后再次输入make执行. 输入make后,很不幸,再次发生如下截图错误: 推测是因为编译库的问题

Python操作Redis缓存数据库

首先我们需要使用到一个redis库,使用之前先安装一下,使用pip进行安装: pip install redis 安装好了redis库之后,我们只需使用import redis导入即可使用了,大部分都是通过这两个步骤使用的:接下来讲解如何操作Redis数据库,介绍一下Redis的五大数据类型:分别是字符串类型string.列表类型list.集合类型set.哈希类型hash.有序集合类型 sorted set 开启数据库 要注意我们操作之前需要先开启Redis数据库,如何安装Redis数据库(该步

Python 命令输出重定向有缓存的问题

将 Python 命令的输出重定向到日志文件的时候,发现输出并不会写到日志文件里 原因是 Python 做了缓存,要把缓存去掉,需要加参数 -u 比如 nohup python -u test.py > test.log 2>&1 & 原文地址:https://www.cnblogs.com/moonlight-lin/p/12239467.html