redis和memcached缓存
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缓存的更多相关文章
- Redis和memcached缓存技术
缓存的定义:缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去 内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度 ...
- nginx+memcached缓存图片
1.nginx的配置如下: location ^~ /images/ { set $memcached_key "$uri"; #用URI作为key去memcached中 ...
- 网站缓存技术(Redis、Memcached、Ehcache)
Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等等. 分类的标准也不一,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点 ...
- 面试题:缓存Redis与Memcached的比较 有用
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度. Memca ...
- 分布式缓存技术PK:选择Redis还是Memcached?
作者:田京昆(腾讯后台研发工程师) 来源:腾云阁(https://www.qcloud.com/community/article/129) Memcached和Redis,作为近些年最常用的缓存服务 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...
- 浅谈redis和memcached的区别
缓存技术方面说到redis大家必然会联想到memcached,了解它们的人应该都知道以下几点吧 redis与 memcached相比,redis支持key-value数据类型,同事支持list.set ...
- Redis 对比 Memcached 并在 CentOS 下进行安装配置
了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...
随机推荐
- CentOS 6 到 CentOS 7
redhat提供了一个redhat-upgrade-tool的升级工具: [1]配置软件源 # vim /etc/yum.repos.d/upgrade.repo [upgrade] name=u ...
- Yii2 利用controllerMap自定义控制器类
版权声明:本文为博主原创文章,未经博主允许不得转载. Yii2框架为我们自定义好的 controllers,Models,views,标准的MVC结构框架,但是有些时候我们写接口希望结构更加清晰而不 ...
- Eclipse中Sever启动成功,但tomcat无法管理页面无法访问。
- net不安装Oracle11g客户端直接使用ODAC
好处: 1.不安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开) 2.不需要安装ODAC 3.不需要配置TnsNames.Ora文件 缺点: ...
- 关于使用微信登录第三方APP的实现(Android版)
使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...
- ecmobile-ios笔记
col或者row里的v-align:bottom会导致里面所有的元素都到bottom,如果有一个元素还好,多个元素,第一个会到底.
- VR全景项目外包团队— VR/AR相关领域介绍和VR全景案例
VR/AR相关领域这里我要说的一点就是硬件.诚然,硬件的确很难搞,国内在这方面就是荒漠,所以,如果你有信心,完全可以开拓一片蓝海.注意我是说真正的硬件,那些把Google的纸盒子拿来改改就能融资千万的 ...
- MySQL concat函数的使用
MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...
- oracle之sequence详解
Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...
- 学习opencv
图像缩放 cv::Mat src_img = cv::imread(); ; cv::Mat dst_img1; cv::Mat dst_img2(src_img.rows*0.5, src_img. ...