python操作Redis缓存

https://www.cnblogs.com/guotianbao/p/8683037.html

学习资料:电子书资源

联系邮箱:gmu1592618@gmail.com

flask微电影:movie_project

正文

一、Redis的安装

  xshell连上服务器,依次输入以下代码:

1
2
3
4
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xzf redis-3.0.6.tar.gz
cd redis-3.0.6
make

  如果不巧发生以下截图中的错误:

  说明未安装gcc,如果是centos系统,输入:yum install gcc安装gcc即可,然后再次输入make执行。

  输入make后,很不幸,再次发生如下截图错误:

  推测是因为编译库的问题。

  将make改为make MALLOC=libc 再次运行!好事多磨。

     终于安装成功了!

  还有配置文件的修改什么的先不折腾了,此时已然可以启动Redis服务

1
2
3
4
5
6
7
8
src/redis-server # 启动服务端
 
# 启动客户端的代码如下
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

     看到上面的图像,说明服务端已经起来了!

  但是看到很多WARNING,没错,此时你用pycharm写了连接redis服务端的代码,但是你发现服务端竟然没有响应

  OK,在服务端Ctrl + C ,先把服务断开

  分别执行下面的语句:

1
2
3
4
echo 511 /proc/sys/net/core/somaxconn
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

  在/etc下的rc.local的最后添加:

1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

  最后的重点来了,折腾半天还是服务器不鸟我,无奈之下试了试临时关闭防火墙:

1
service iptables stop 

  唉呀呀,终于成功了!

  我在另一台服务器用了另一种搭建方法:传送门也成功了,但是也不要忘记要临时关掉防火墙。

二、Redis的两种连接方式

1.简单连接
1
2
3
4
5
import redis
conn = redis.Redis(host='207.148.120.229', port=6379)
conn.set('foo''Bar')
print(conn.get('foo'))
= input('按任意键结束')
2.使用连接池  

  为了减少每次建立、释放连接的开销,推荐使用连接池

  redis使用connection pool来管理对一个redis服务的所有连接。

  多个redis实例可共享一个连接池。

1
2
3
4
5
6
7
import redis
pool = redis.ConnectionPool(host='207.148.120.229',port=6379)
conn = redis.Redis(connection_pool=pool)
 
conn.set('key''Hello World')
print(conn.get('key'))
= input('按任意键结束')

三、五大数据类型

1.String操作  

  redis中的String在在内存中按照一个key对应一个value来存储。以键值对的方式存储。

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

   mset(*args, **kwargs) 批量设置值

 

  get(name)  获取值

print(conn.get('k1'))

  mget(keys, *args) 批量获取值

  getset(name, value) 设置新值并获取原来的值

  getrange(key, start, end)  获取name对应value的指定字节

  setrange(name, offset, value) 从指定字节开始替换新值

  strlen(name) 获取name对应的value的长度

  incr(self, name, amount=1) name存在,则自增amount,否则设置name的value值为amount

  decr(self, name, amount=1) 自减(整数)

     append(key, value)

2.Hash操作

  hset(name, key, value)  设置值

  

  hmset(name, mapping) 批量设置值

  hmget(name, keys, *args) 获取多个值

  hgetall(name)  获取name对应hash的所有键值

  hlen(name)  获取name对应的hash中键值对的个数

  hkeys(name)  获取name对应的hash中所有的key的值

  hvals(name)  获取name对应的hash中所有的value的值

  hdel(name,*keys)  将name对应的hash中指定key的键值对删除

  hincrby(name, key, amount=1)  自增(整数)

  hincrbyfloat(name, key, amount=1.0) 自增(浮点数)

  hscan(name, cursor=0, match=None, count=None)   增量式迭代获取

  hscan_iter(name, match=None, count=None)

3.List操作

  lpush(name,values)

  lpushx(name,value)

  

  llen(name)  name对应的list元素的个数

  linsert(name, where, refvalue, value))

  

  r.lset(name, index, value)

  

  r.lrem(name, value, num)

  

  lpop(name)

  lindex(name, index)  在name对应的列表中根据索引获取列表元素

  lrange(name, start, end)

  

  ltrim(name, start, end)

  

  rpoplpush(src, dst)

  

  blpop(keys, timeout)

# 将多个列表排列,按照从左到右去pop对应列表的元素

# 参数:
# keys,redis的name的集合
# timeout,超时时间,当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞 # 更多:
# r.brpop(keys, timeout),从右向左获取数据

  brpoplpush(src, dst, timeout=0)

  自定义增量迭代

4.Set操作

  Set集合就是不允许重复的列表

  sadd(name,values)  name对应的集合中添加元素

  scard(name)  获取name对应的集合中元素个数

  sdiff(keys, *args)  在第一个name对应的集合中且不在其他name对应的集合的元素集合

  sdiffstore(dest, keys, *args)  获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中

  sinter(keys, *args)  获取多一个name对应集合的并集

  sinterstore(dest, keys, *args)  获取多一个name对应集合的并集,再讲其加入到dest对应的集合中

  sismember(name, value)  检查value是否是name对应的集合的成员

  smembers(name)    获取name对应的集合的所有成员

  smove(src, dst, value)  将某个成员从一个集合中移动到另外一个集合

  spop(name)  从集合的右侧(尾部)移除一个成员,并将其返回

  srandmember(name, numbers)  从name对应的集合中随机获取 numbers 个元素

  srem(name, values)  在name对应的集合中删除某些值

  sunion(keys, *args)  获取多一个name对应的集合的并集

  sunionstore(dest,keys, *args)  获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中

  sscan_iter(name, match=None, count=None)  同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大

5.有序集合

  在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。

  zadd(name, *args, **kwargs)  在name对应的有序集合中添加元素

  zcard(name)  获取name对应的有序集合元素的数量

  zcount(name, min, max)  获取name对应的有序集合中分数 在 [min,max] 之间的个数

  zincrby(name, value, amount)   自增name对应的有序集合的 name 对应的分数

  r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)

  zrank(name, value)  

  zrangebylex(name, min, max, start=None, num=None)

  zrem(name, values)

  zremrangebyrank(name, min, max)  根据排行范围删除

  zremrangebyscore(name, min, max)  根据分数范围删除

  zremrangebylex(name, min, max)  根据值返回删除

  zscore(name, value)  获取name对应有序集合中 value 对应的分数

  zinterstore(dest, keys, aggregate=None)

  zunionstore(dest, keys, aggregate=None)

  zscan_iter(name, match=None, count=None,score_cast_func=float)  同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作

6.其他常用操作

  delete(*names)  根据name删除redis中的任意数据类型

  exists(name)  检测redis的name是否存在

  keys(pattern='*')

  expire(name ,time)  为某个redis的某个name设置超时时间

  rename(src, dst)  对redis的name重命名

  move(name, db)  将redis的某个值移动到指定的db下

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

  type(name)  获取name对应值的类型

  scan(cursor=0, match=None, count=None)

  scan_iter(match=None, count=None)  同字符串操作,用于增量迭代获取key

四、管道

  redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

五、发布和订阅

  发布者:服务器

  订阅者:Dashboad和数据处理

  Demo如下:

 RedisHelper

  订阅者:

  发布者:

python操作Redis缓存的更多相关文章

  1. 第三百零一节,python操作redis缓存-管道、发布订阅

    python操作redis缓存-管道.发布订阅 一.管道 redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pi ...

  2. 第三百节,python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型

    python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型 delete(*names)根据删除redis中的任意数据类型 #!/usr/bin/env pyt ...

  3. 第二百九十九节,python操作redis缓存-SortSet有序集合类型,可以理解为有序列表

    python操作redis缓存-SortSet有序集合类型,可以理解为有序列表 有序集合,在集合的基础上,为每元素排序:元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值, ...

  4. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表

    python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...

  5. 第二百九十七节,python操作redis缓存-List类型,可以理解为列表

    python操作redis缓存-List类型,可以理解为列表,是可以有重复元素的列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name ...

  6. 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型

    第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...

  7. 第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  8. redis缓存数据库及Python操作redis

    缓存数据库介绍  NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...

  9. python——操作Redis

    在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...

随机推荐

  1. LA3263 That Nice Euler Circuits

    题意 PDF 分析 欧拉定理:设平面内顶点数.边数.面数分别为\(V,E,F\),则\(V+F-E=2\). 枚举每对线段求交点,注意去重. 另外注意第n个端点和第一个端点重合. 时间复杂度\(o(T ...

  2. 一分钟理解js闭包

    什么是闭包?先看一段代码: ? 1 2 3 4 5 6 7 8 9 10 function a(){   var n = 0;   function inc() {     n++;     cons ...

  3. 一个苹果证书如何多次使用——导出p12文件[多台电脑使用]

    为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了(一般在我们的证书界面中 ...

  4. Asp.Net 构架(HttpModule 介绍) - Part.3

    引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...

  5. MFC命令消息的路由

    下面,我们以Menu这个程序为例,来看看 菜单命令消息路由的具体过程:当单击某个菜单项时,最先接收到这个菜单命令消息的是框架类.框架类将把接收到的这个消息交给它的子窗口.即视类,由视类首先进行处理.视 ...

  6. Java:Java 清单

    ylbtech-Java:Java 清单 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylb ...

  7. datatables ajax异步分页

    $('#sample_1').dataTable({ "sAjaxSource": "../table/data", // "bProcessing& ...

  8. PL/SQL 训练08--触发器

    --什么是触发器呢?--一触即发,某个事件发生时,执行的程序块?--数据库触发器是一个当数据库发生某种事件时作为对这个事件的响应而执行的一个被命名的程序单元 --适合场景--对表的修改做验证--数据库 ...

  9. PL/SQL 训练05--游标

    --隐式游标--通过一个简单的SELECT ...INTO 语句提取一行数据,并放在一个局部变量中,最简单获取数据的途径 --显示游标--可以在声明单元明确的声明一个查询,这样可以在一个或多个程序中打 ...

  10. 转:oracle几组重要的常见视图-v$latch,v$latch_children,v$lock,v$locked_object

    v$latch Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种.Latch是用于保护SGA区中共享数据结构的一种串行化锁定机制.Latch的实现是与操作系统相关的, 尤 ...