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 ,它几乎没有上手难度,只需要几分钟我们就能完 ...
随机推荐
- [java] jsoup 解析网页获取省市区域信息
到国家统计局抓取数据, 到该class下解析数据 /** * jsoup解析网页 * @author xwolf * @date 2016-12-13 18:11 * @since V1.0.0 */ ...
- [转载]jQuery1.9完全删除live事件
其实关于live被删除的事件早就在1.7.2版本以后就有通知过了 不过在官方一直提倡使用.on代替.live的过程中 .live事件一直沿用 今天更新了 看下jQuery1.9的相关信息 发现api中 ...
- MSSQL 多行合并为一行
select ptl_a01, ptl_piitem, ( ) as ptl_count, STUFF((SELECT ','+ltrim(ptl_pdid) FROM PRODUCT_TRACEAB ...
- Realitymining 数据集简单介绍与使用
数据集的官网 http://realitycommons.media.mit.edu/index.html(可能需要FQ) ,下面是数据集的简要介绍(摘自官方网站) The goal of this ...
- 扩展ValidationAttribute 1
MVC中经常会用一些服务端对Model的验证. 服务端验证要继承自ValidationAttribute,并重写IsValid虚方法来自定义自己的验证规则. protected override Va ...
- ld.so.conf 和 ldconfig
1. 查看执行文件的链接库 ldd 例子: # ldd /sbin/sln not a dynamic executable “not a dynamic executable”是 ldd 说明 sl ...
- centos6.3(64位) 安装apr
安装apr来提高tomcat 的可伸缩性和性能 ? 1 cd /usr/local/ 1 下载apr 和 apr-util最新版 ? 1 2 3 wget http://apache.fayea. ...
- 由于C++编译器的分析机制所导致的声明问题
假设我们想声明一个STL的vector类型的变量,读入文件里的信息: std::ifstream in("data.txt"); std::vector<int> da ...
- unity3d加载默认工程秒退怎么办
加载Unity3D工程时出现秒退, 怎么尝试都没有用(已经确定了项目路径名称全部为英文). 然后就再也没办法打开Unity3D了,因为一打开它就会默认加载上回的工程. 解决办法: 把最后一次加载的工程 ...
- 【HOW】如何通过URL给Reporting Services报表传递参数
[本地模式Reporting Services] 参见官方文档:http://msdn.microsoft.com/en-us/library/ms154042.aspx 示例:http://serv ...