一. 安装:
- 以下步骤运行在 Centos 7:
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar xzf redis-4.0.2.tar.gz
cd redis-4.0.2
make
- 启动服务端
src/redis-server
- 启动客户端
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
二. Python 操作 redis
- 首先安装
pip3 install redis
来先在 pycharm 里面走一波,和虚拟机交互一下。
- 一: 先在虚拟机上启动 redis 服务。
- 二: pycharm走起
import redis
conn = redis.Redis(host='192.168.20.75', port=6379)
# conn.ping()
conn.set('ff', 17)
ret = conn.get('ff')
print(ret)
- 三: 有错吗兄弟???
- 别急,跟着节奏来
首先把你服务端的防火墙关掉。 systemctl stop firewalld systemctl disable firewalld 然后你的错误应该来到了: 链接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168..)这个链接,如果用网络ip 链接会报以下的错误: (error) DENIED Redis is running in protected mode because protected mode is enabled... 这是说处于保护模式,只能本地链接,我们需要修改配置文 vim redis.conf 第一步: # bind:127.0.0.1 第二步: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no daemonize no 第三步: 保护模式 protected-mode no *****第四步: 启动的时候,带着配置文件。 src/redis-server redis.conf 完美!!!
Redis
简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
-
配置文件
- 默认16个数据库 0-15
- 时间间隔物理写的频度
save 900 1 #900秒写了一次 就写操作 - 物理存储名称
dbfilename
-
Redis是key-value的数据,所以每个数据都是一个键值对
- 键的类型是字符串
- 值的类型分五种
- 字符串 string
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 zset
-
redis 操作的五种数据格式再了解一下:
- 字符串 String操作
- 哈希 Hash 操作
- 列表 List 操作
- 集合 Set 操作
- 有序集合 Sort Set 操作
Redis是key-value的数据,所以每个数据都是一个键值对
- string
string是redis最基本的类型
最大能存储512MB数据
string类型是二进制安全的 即可以为任何数据 比如数字 图片 序列化对象等
1. set key value #设置键值
2. setex key second value #设置键值及过期时间,以秒为单位
3. get key #根据键获取值,如果不存在,此键则返回null
运算
- 要求: 值是数字
- incr key #将key对应的value加1
- key的命令
KEYS pattern #查找键 参考支持正则
- keys * #查询所有的key 匹配任意个字符
- keys ? #匹配任意一个字符
- keys [a-z] #a或b
- keys [0-9]
- keys [a-z],0-9] #a0
- keys ? #匹配一个
- keys * #匹配多个
EXISTS key #判断键是否存在,如果存在返回1,不存在返回0
TYPE key #查看键对应的value类型
DEL key #删除键及对应的值
TTL key #查看有效时间 以秒为单位
EXPIRE key 10 #设置key的过期时间 以秒为单位
- hash #hash 用于存储对象,对象的格式为键值对
#默认配置文件
hash-max-ziplist-entries 512 #512字节
hash-max-ziplist-value 64 #字段数目
#设置
HSET key field value #设置单个属性
HSETNX key field value #字段不存在才设置成功
HMSET key field1 value1 field2 value2 #设置多个属性值
#获取
HGET key field #获取一个属性的值
HMGET key field1 field2 #获取多个属性的值
HGETALL key #获取所有属性和值
HKEYS key #获取所有的属性
HVALS key #获取所有field对应的值
HLEN key #返回包含属性的个数
HEXISTS key field #判断这个属性的值是否存在
#相加
HINCRBY key field 10 #对属性的值相加 值得是数值类型
HINCRBYFLOAT key field 10.11 #key做浮点相加,原来key也是浮点
#删除
HSEL key field1 field1 #删除
- list
列表的元素类型为string
按照插入顺序排序
在列表的头部或者尾部增加元素
LPUSH #在头部插入数据
LINSERT key BEFBEFORE/AFTER 索引 value #在一个元素的前后插入新元素
- 发布订阅
- 发布订阅模式指一种代码的结构 开发的开发方式
- 有一端完成数据的发布,定制 另一端接收数据
- 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
- 订阅者对一个或多个频道感兴许,只需要接受感兴趣的消息,不需要知道什么样的发布者发布的
- 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
- 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
- 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来
消息的格式
- 推送消息的格式包含三部分
- part1:消息类型,包含三种类型
- subscribe 表示订阅成功
- unsubscribe 表示取消订阅成功
- message 表示其它终端发布消息
如果第一部分的值为subscribe 则第二部分是频道 第三部分是现在订阅的频道的数量
如果第一部分的值为unsubscribe 则第二部分是频道 第三部分是订阅的频道的数量 如果为0则表示当前没有订阅任何频道 当在Pub/
Sub以外状态,客户端可以发出任何redis命令
如果第一部分的值为message 则第二部分是来源频道的名称 第三部分是消息的内容
命令
- SUBSRIBE 频道名称 #订阅
- UNSUBSRIBE 频道名称 #取消订阅 如果不写参数,表示取消所有订阅
- PUBLISH 频道 #发布
{
"k1":"ff",
"k2":[1,2,3,5,5,3,2,1],
"k3":{1,2,3,5,6},
"k4":{
"n1":'pp',
"n2":"ww"
},
"k5":{(11,1),('ff',5)},
}
hscan: 增量迭代
hscan_iter: 一个个拿
- 可是又不能让他频繁链接,一次取比如20条。在该方法中,有调用了 hscan
如果需要链接的话,推荐使用连接池
pool = redis.ConnectionPool(host='', port=6379)
r = redis.Redis(connection_pool = pool)
如果在 django 里面,应该是公用一个链接
- 但是在 django 里面,它有自己的组件。
pip3 install django-redis
import django_redis
conn = django_redis.get_redis_connection()