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 ,它几乎没有上手难度,只需要几分钟我们就能完 ...
随机推荐
- 服务端性能测试工具校验v1.0
性能测试工具对服务端进行并发测试时,如果工具本身问题或异常就会造成真实并发与实际并发有差距,要测试10000/S并发的性能结果实际到达服务端的并发达不到95%,这样的测试无效. 所以给大家共享,我做的 ...
- 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...
- javascript Date
转:http://blog.csdn.net/vbangle/article/details/5643091# // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日( ...
- load()方法---------jQuery动态加载html
jquery代码 $("#div").load("test.html"); test.html ----------------被加载页面(有<HTM ...
- 记录Tomcat7.x热部署配置过程
我自己的开发版本是tomcat7.0.43+myeclipse14 原版在:http://blog.csdn.NET/chen_zw/article/details/8867779 热部署是指在你对项 ...
- JAVA下载文件中文乱码问题
http://blog.itpub.net/92037/viewspace-788900/ 最后的中文乱码没有解决 现在我在系统中用到了两个组件,smartupload,一个支持中文,一个不支持.但是 ...
- javascript函数原型理解
一.当引用一个对象的属性时,若该对象没有此属性,则会查找该对象的原型,若原型上存在该属性,则返回该属性. <script type="text/javascript"> ...
- Linux文件权限
Permission deny 权限 拒绝 查看权限 ls -a ls -la expression 查看文件夹里边东西的权限 用户群的分类 组群:一个操作系统可能几个人同时用 方便小组的文件 ...
- disposition
该文为堕落的天使不再来原创.欢迎转载. 在尽心web开发时,可能遇到以下几种需求:(disposition配置) 希望某类或者某已知MIME 类型的文件(比如:*.gif;*.txt;*.htm)能够 ...
- .net MVC3 页面和 action 传值问题
一.ViewData ViewData ViewBag 的特点和使用场景比较 1. TempData:类型是字典的键值对结构 特点:值只能取一次.保存在Session中,Controller每次执行 ...