存储系统数据缓存一般会使用三个模块:Mongodb,redis,memcache。其中memcache是轻量级缓存,只能将数据保存到内存中,redis可以配置数据保存在内存还是硬盘。

其主要用途有:不同应用(语言)中共享数据

CentOS安装Redis

安装

  1. yum install epel-release
  1. yum install redis

开启服务:

  1. systemctl start redis

设置密码:

编辑文件:/etc/redis.conf

#requirepass foobared去掉注释,foobared改为自己的密码

requirepass newpasswd #这句表示该密码为newpasswd

保存并重启redis服务

设置密码后的命令行登入方式:redis-cli -h 127.0.0.1 -p 6379 -a newpasswd

设置远程端可访问:

因为redis服务默认不提供远程操作

编辑文件:/etc/redis.conf

将bind 127.0.0.1 改为 bind 0.0.0.0

保存并重启redis服务

设置防火墙开放端口

  1. firewall-cmd --zone=public --add-port=6379/tcp --permanent

重启防火墙

  1. systemctl restart firewalld

命令行基本操作操作

连接

  1. redis-cli

通过键值对设置值

set key value [EX seconds] [PX milliseconds] [NX|XX]

其中ex表示保存的秒数,px表示毫秒数,nx表示key不存在时才操作,xx表示key存在时才操作

  1. set keyx valuex

设置值且保存5秒

  1. set keyx1 valuex1 ex 5

一次性设置多个

  1. mset key1 value1 key2 value2

设置新值并返回原值

  1. getset key1 value1111

字符串切片,如"value1"经过下面结果为:"val"

  1. getrange key1 0 2

退出

  1. exit

通过键值对获取值

  1. get keyx

查看所有的键

  1. keys *

查看带有e字符的所有key

  1. keys *e*

一次性获取多个

  1. mget key1 key2

通过键值对删除值

  1. del key [key ...]

判断键是否存在,返回0或1

  1. exists key1

重命名

  1. rename key1 key2

跳转到另一个空间(db)

总共有[0,15]个,默认为0

  1. select 1

移动键值内容

  1. move key db

自增自减

自增:

  1. incr keycunx #执行一次增加一

自减

  1. decr keycunx #执行一次减去一

二进制位操作:

如果把设置值的offset匹配成用户id,则可以实现高效的用户登入判断,设置1为登入,0为非登入

设置值:

setbit key offset value 设置二进制offset位的值为value

  1. setbit dongbit 2 1
  2. setbit dongbit 1000 1

取出值为1的位个数:

  1. bitcount dongbit #输出2

获取二进制第几位的值:

  1. getbit dongbit 10 #输出0
  2. getbit dongbit 2 #输出1

Hash操作:

设置数据

hset key field value 其中key总键,field为子键,value为子键的值

  1. hset user name dongxiaodong
  2. hset user passwd pdongdongdong

获取到所有数据:

  1. hgetall user
  2. hkeys user
  3. hvals user

获取到指定数据:

  1. hget user passwd

批量设置:

  1. hmset user1 name dong1 passwd pdong111

判断子键是否存在,存在返回1,否则为0

  1. hexists user1 passwd

列表操作:

设置

rpush key value [value ...] #一个key可以保持多个value,先入先出,如果需要先入后出则使用rpush

  1. rpush listdong dong1 dong2 dong3

取值:

lrange key start stop 取key的值需要确定起始和结束位置

  1. lrange listdong 0 -1 #取所有
  2. lrange listdong 1 1 #确定某个

集合操作(值不可重复):

设置

  1. sadd aggdong dong1 dong2 33 dong1

取值

  1. smembers aggdong

获取个值数

  1. scard aggdong

Python基本操作

安装模块

  1. pip3 install redis

简单的连接:

  1. #连接方法一:
  2. #每次操作都是一个连接,如get、set等,一个就是一个网络连接,所以不可取
  3. # conn=redis.Redis(host="192.168.1.195",port=6379,password="rpdong")
  4.  
  5. #连接方法二(连接池)
  6. poolx=redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
  7. conn=redis.Redis(connection_pool=poolx)
  8.  
  9. #设置数据
  10. conn.set("keyx","valuexx")
  11. #取出数据
  12. print(conn.get("keyx"))

键值对操作补充:
只有键本身存在时才更改数据值和最长保留时间为10秒

  1. #设置数据,
  2. conn.set("keyx","valuexx",ex=10,xx=True)

发布和订阅:

发布

命令行发布:

参数为:publish 主题 内容

  1. publish dongtop dongtototo

Python发布:

  1. import redis
  2.  
  3. #连接池
  4. poolx=redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
  5. conn=redis.Redis(connection_pool=poolx)
  6.  
  7. #发布消息,参数(主题,内容)
  8. conn.publish("dongtop","dongxiaodongtext")
  9. conn.publish("dongtop2","dongxiaodongtext222")
  10.  
  11. print("------ 发送完成 --------")

订阅:

  1. import redis
  2.  
  3. #连接池
  4. poolx=redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
  5. conn=redis.Redis(connection_pool=poolx)
  6.  
  7. pub=conn.pubsub() #打开接收
  8. pub.subscribe("dongtop") #设置接收主题
  9. pub.subscribe("dongtop2")
  10.  
  11. print("-------- 等待接收 ---------")
  12.  
  13. while True:
  14. msgx=pub.parse_response() #准备接收,如果无数据则阻塞
  15. '''
  16. 第一次会输出订阅成功消息:
  17. 收到的数据为: [b'subscribe', b'dongtop', 1]
  18. 收到的数据为: [b'subscribe', b'dongtop2', 2]
  19. #输出:
  20. 收到的数据为: [b'message', b'dongtop', b'dongxiaodongtext']
  21. 收到的数据为: [b'message', b'dongtop2', b'dongxiaodongtext222'
  22. '''
  23. print("收到的数据为:",msg

基于订阅和发布的小文件传输:

发布端

  1. #发布消息,参数(主题,文件内容)
  2. conn.publish("dongtop",open("南沙客运港.mp4","rb").read())
  3.  
  4. print("------ 发送完成 --------")

接收端:

  1. msgx =pub.parse_response() # 去掉第一次订阅成功的消息
  2. print("-------- 等待接收 ---------",msgx)
  3. while True:
  4. msgx =pub.parse_response() # 准备接收,如果无数据则阻塞
  5. #得到文件数据并写入文件
  6. open("客运港.mp4","wb").write(msgx[2])
  7. print("----* 接收完成 *----")

Python存储系统(Redis)的更多相关文章

  1. python之redis和memcache操作

    Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...

  2. python——操作Redis

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

  3. 【python】Redis介绍及简单使用

    一.redis redis是一个key-value存储系统.和 Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合).zset(s ...

  4. python之 Redis

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  5. python 实现redis订阅发布功能

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  6. python之redis模块

    一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  7. Python操作Redis(一)

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  8. Python操作Redis、Memcache

       今天主要介绍如何通过python来对Redis和memcache进行操作,下面开始今天的内容: 一.Memcached操作 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web ...

  9. Redis - Python操作Redis

    目录 Python操作Redis 一. Redis安装和基本使用 二. Python操作Redis API使用 1.操作模式 2.连接池 3.Django配置Redis 4.操作 Python操作Re ...

  10. python中redis

    一.简介 二.redis的安装和使用 三.python操作readis之安装和支持存储类型 四.python操作redis值普通链接 五.python操作redis值连接池 六.操作之String操作 ...

随机推荐

  1. 任务调度--spring下的任务调度quartz

    之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @aut ...

  2. MYSQL的空间查询

    http://blog.sina.com.cn/s/blog_a48af8c001018q1p.html 本文将向各位介绍如何使用MySql5.x中的空间数据库,并展示一下它高效的性能(前提是正确使用 ...

  3. 详解MUI顶部选项卡(tab-top-webview-main)的用法

    最近用MUI做手机app的时候,遇到了一点问题.然后就对这个tab-top-webview-main的源码做了点研究,接下来我将和大家详解一下 tab-top-webview-main的用法和应该注意 ...

  4. 自动化脚本中click()或sendKeys()没有反应

    前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...

  5. protocol_v2.go

    {         return protocol.NewFatalClientErr(nil, "E_INVALID",             fmt.Sprintf(&quo ...

  6. ConcurrentLinkedQueue简介

    ConcurrentLinkedQueue是一个基于链表的无界线程安全队列,非阻塞实现方式,先进先出,适合高并发的场景. 非阻塞的性能较好,采用CAS,避免加锁的时间,保证数据一致性. 采用" ...

  7. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  8. Micropython TPYBoard ADC的使用方法

    基本用法 import pybadc = pyb.ADC(Pin('Y11')) # create an analog object from a pinadc = pyb.ADC(pyb.Pin.b ...

  9. Spring事务管理----事物回滚

    Spring的事务管理默认只对未检查异常(java.lang.RuntimeException及其子类)进行回滚,如果一个方法抛出Checked异常,Spring事务管理默认不进行回滚. 改变默认方式 ...

  10. MySQL · 引擎特性 · 临时表那些事儿

    前言 相比于普通的用户数据表,MySQL/InnoDB中的临时表,大家应该会陌生很多.再加上不同的临时表创建的时机和创建的位置都不固定,这也进一步加大神秘感.最让人捉摸不透的是,临时表很多时候会先创建 ...