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 ,它几乎没有上手难度,只需要几分钟我们就能完 ...
随机推荐
- python 发邮件-带附件-文本-html
#!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...
- varchar2_to_blob,应用向数据库更新LOB字段时的超时问题
将字符串转换为BLOB类型数据,写入服务器. 1,首先利用to_clob函数把varchar2字段转成 clob字段. 2 利用c2b上面函数将clob转成blob. 即: c2b(to_clob( ...
- JS转换HTML转义符
JS转换HTML转义符 //去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'') ...
- Linux下使用ping快速检测存活主机
该shell脚本主要是通过ping来批量检测网段内存活主机,执行结果保存在脚本当前目录下的IPinfor目录中,写的比较匆忙,希望大家留下更好的建议. #!/usr/bin/env bash##### ...
- [2014.01.27]wfRadar 雷达图组件 2.5
全新开发的雷达图组件--wfRadar,使用简单,功能强大,图像处理效果极佳. 组件支持多种图片格式,包括bmp,jpg,gif,wmf,emf,ico,png,pcx,tif,tga,pcx,dcx ...
- sql 跨库查询备忘笔记
select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 inse ...
- 学会使用notepad++
官网地址:https://notepad-plus-plus.org/ 字体尺寸更改:ctrl+鼠标滚轮 主题:设置-语言格式设置,推荐Obsidian或者Zenburn主题,推荐Consolas 1 ...
- Android framework完整源码下载
包括cpp等native代码.可zip打包下载. https://github.com/android/platform_frameworks_base/branches/stale Android线 ...
- 最新版STS因为JDK版本太低无法启动的解决办法
-startup plugins/org.eclipse.equinox.launcher_1..jar --launcher.library plugins/org.eclipse.equinox. ...
- TP中的session和cookie
session:1.session('name','value'); //设置session2.$value = session('name'); // 获取所有的session 3.2.2版本新 ...