memcached

memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群

memcached下载地址:

http://memcached.org/downloads

python实现memcached缓存

pip3 install python-memcached

import memcache
aa=memcache.Client(["10.0.0.20:11211"],debug=True)
aa.set("k1","v1")
print(aa.get("k1"))

memcached方法使用

import memcache
aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True) #会存到11212中
aa.set("k1","v1")
aa.replace("k1","hahaha")
aa.set('k2', '')
aa.incr('k2',100)
print(aa.get("k2"))
aa.decr('k2',50)
print(aa.get("k2"))
import memcache
aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True,cache_cas=True)
print(aa.gets("product_count"))
#aa.set("product_count","111")
#在gets和最后的cas之间,如果修改值,就会抛出异常
aa.cas("product_count","")

redis

redis持久化存储系统,全称remote directory server,是基于key-value的持久化数据库存储系统。redis和memcached很相似,redis的数据类型更丰富:string,list,set,hash,sorted set,redis,支持主从同步,把更新的数据写到磁盘

下载地址: http://download.redis.io/releases/redis-2.8.9.tar.gz

python实现redis缓存

服务器要开启redis,python安装redis模块:pip3 install redis

基本操作:

import redis
aa=redis.Redis(host="10.0.0.20",port=7777)
aa.set("k1","v1",ex=2)
print(aa.get("k1"))

管理连接的连接池:

import redis
pool=redis.ConnectionPool(host="10.0.0.20",port=7777)
aa=redis.Redis(connection_pool=pool)

redis构造方法:

    def __init__(self, host='localhost', port=6379,
db=0, password=None, socket_timeout=None,
socket_connect_timeout=None,
socket_keepalive=None, socket_keepalive_options=None,
connection_pool=None, unix_socket_path=None,
encoding='utf-8', encoding_errors='strict',
charset=None, errors=None,
decode_responses=False, retry_on_timeout=False,
ssl=False, ssl_keyfile=None, ssl_certfile=None,
ssl_cert_reqs=None, ssl_ca_certs=None,
max_connections=None):
db:数据库号
password:输入redis设置的密码

redis数据类型:

1,string类型

2,list

3,hash

4,set

5,sorted set

string

set(name, value, ex=None, px=None, nx=False, xx=False)

ex:设置此数据的超时时间

nx:如果设置为True,只有当name不存在时,set执行

xx:如果设置为True,只有当name存在时,set执行

setnx(name, value)

只有当name不存在时,set执行

setex(name, value, time)

设置数据有效期

mset(*args, **kwargs)

设置多个数据

get(name)

strlen(name)

获取name的值的字节长度

incr(name, amount=1)

整数自增

incrbyfloat(name, amount=1.0)

以小数自增

decr(name, amount=1)

整数自减

aa.flushdb()
aa.set("k1","v1")
aa.mset({"aa":22,"vv":""})
print(aa.get("k1"))
print(aa.mget("k1","aa")) #[b'v1', b'11']
print(aa.strlen("k1"))
aa.append("こ","じ")
print(aa.keys()[0].decode()) #こ
print(aa.incr("aa")) #
print(aa.decr("aa",amount="")) #
exit()

hash

hset(name, key, value)

name:redis的key

key:name下的一个key

value:key的value

hmset(name, mapping)

一次性创建hash

hget(name, key)

获取name的key的value

hkeys(name)

获取name下的所有的key

hvals(name)

取name下的所有value

hexists(name, key)

是否存在此hash

hlen(name)

查看name下的hash数

hdel(name, *keys)

删除name下的hash,可删除多个

aa.flushdb()
aa.hset("rdi1","k1","v1")
aa.hset("rdi1","k2","v2") #rdi1={"k1":"v1","k2":"v2"}
aa.hmset("rdi2",{"k1":"v1","k2":"v2"})
aa.hmset("rdi3",{"k1":"v1","k2":"v2"})
print(aa.hmget("rdi2","k2","k1"))
print(aa.hkeys("rdi2"))
print(aa.hvals("rdi2"))
print(aa.keys())
print(aa.hdel("rdi2","k1","k2"))
print(aa.hkeys("rdi2"))

list

lpush(name, *values)

在左边压入一个或多个值

lpop(name)

从左边弹出一个值,并从列表中删除

lset(name, index, value)

设置已有索引的值,若指定从左边开始的索引无值,则报错

lrange(name, start, end)

从左边开始,切片

lrem(name, value, num=0)

从左边开始取指定值删除,num指定删除几个,0表示所有删除

rpoplpush(src, dst)

从一个列表的最右边取出数放到另一个的最左边

aa.flushdb()
aa.lpush("k1",11,22) #k1=[22,11]
aa.lpush("k1",33) #k1.lappend(33)
aa.rpush("k1",11) #k1.rappend(33)
aa.lrem("k1",11,num=1) print(aa.type("k1"))
print(aa.llen("k1"))
aa.lset("k1",2,"hello")
aa.rpoplpush("k1","k2")
print(aa.lpop("k2"))
print(aa.lrange("k1",0,aa.llen("k1"))) print(aa.lpop("k1"))
print(aa.lpop("k1"))

Set

sadd(name, *values)

添加name下value,可以一次添加多个

scard(name)

查看name下有多少元素

sdiff(keys, *args)

取keys和*args的差集,keys - *args

sdiffstore(dest, keys, *args)

把上面得出的差集存到dest里

sinter(keys, *args)

取keys和*args的交集,keys & *args

sinterstore(dest, keys, *args)

把上面得出的并集存到dest里

sunion(keys, *args)

取keys和*args的并集,keys | *args

smembers(name)

打印name下的所有元素

spop(name)

从尾部删除一个成员

smove(src, dst, value)

移动src下的value值到dst

aa.flushdb()
aa.sadd("rdi1","v1","v2","v3") #rdi1={"v1","v2","v3"}
aa.sadd("rdi2","v2","v5") #rdi2={"v2","v5"}
print(aa.type("rdi1"))
print(aa.scard("rdi1"))
print(aa.sdiff("rdi1","rdi2")) #rdi1 - rdi2
aa.sdiffstore("rdi3","rdi1","rdi2") #rdi3 = rdi1 - rdi2
print(aa.sinter("rdi1","rdi2")) #rdi1 & rdi2
aa.sinterstore("rdi3","rdi1","rdi2")
print(aa.sunion("rdi1","rdi2")) #rdi1 | rdi2
print(aa.smembers("rdi1")) #print(rdi1)

Other

keys(self, pattern='*')

列出所有键

type(name)

查看值的类型

flushdb()

清空当前db

flushall()

清空所有数据

dbsize()

查看此db下有多少个name

move(name, db))

将redis的某个值移动到指定的db下

randomkey()

随机获取一个redis的name(不删除)

expire(name ,time)

为某个redis的某个name设置超时时间

delete(*names)

根据删除redis中的任意数据类型

redis和memcached缓存的更多相关文章

  1. Redis和memcached缓存技术

    缓存的定义:缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去    内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度 ...

  2. nginx+memcached缓存图片

    1.nginx的配置如下: location ^~ /images/ {     set $memcached_key  "$uri"; #用URI作为key去memcached中 ...

  3. 网站缓存技术(Redis、Memcached、Ehcache)

    Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等等. 分类的标准也不一,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点 ...

  4. 面试题:缓存Redis与Memcached的比较 有用

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.    Memca ...

  5. 分布式缓存技术PK:选择Redis还是Memcached?

    作者:田京昆(腾讯后台研发工程师) 来源:腾云阁(https://www.qcloud.com/community/article/129) Memcached和Redis,作为近些年最常用的缓存服务 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  7. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  8. 浅谈redis和memcached的区别

    缓存技术方面说到redis大家必然会联想到memcached,了解它们的人应该都知道以下几点吧 redis与 memcached相比,redis支持key-value数据类型,同事支持list.set ...

  9. Redis 对比 Memcached 并在 CentOS 下进行安装配置

    了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

随机推荐

  1. CentOS 6 到 CentOS 7

    redhat提供了一个redhat-upgrade-tool的升级工具: [1]配置软件源   # vim /etc/yum.repos.d/upgrade.repo [upgrade] name=u ...

  2. Yii2 利用controllerMap自定义控制器类

    版权声明:本文为博主原创文章,未经博主允许不得转载. Yii2框架为我们自定义好的  controllers,Models,views,标准的MVC结构框架,但是有些时候我们写接口希望结构更加清晰而不 ...

  3. Eclipse中Sever启动成功,但tomcat无法管理页面无法访问。

  4. net不安装Oracle11g客户端直接使用ODAC

    好处: 1.不安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开) 2.不需要安装ODAC 3.不需要配置TnsNames.Ora文件 缺点: ...

  5. 关于使用微信登录第三方APP的实现(Android版)

    使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...

  6. ecmobile-ios笔记

    col或者row里的v-align:bottom会导致里面所有的元素都到bottom,如果有一个元素还好,多个元素,第一个会到底.

  7. VR全景项目外包团队— VR/AR相关领域介绍和VR全景案例

    VR/AR相关领域这里我要说的一点就是硬件.诚然,硬件的确很难搞,国内在这方面就是荒漠,所以,如果你有信心,完全可以开拓一片蓝海.注意我是说真正的硬件,那些把Google的纸盒子拿来改改就能融资千万的 ...

  8. MySQL concat函数的使用

    MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...

  9. oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...

  10. 学习opencv

    图像缩放 cv::Mat src_img = cv::imread(); ; cv::Mat dst_img1; cv::Mat dst_img2(src_img.rows*0.5, src_img. ...