Python And Redis

2018-05-10  本文已影响0人  小混混_f0f2

redis

概述

redis是一种mysql非关系型数据库,它是由ANSI C编写, 数据保存在内存中, 同时也按照备份策略同步到磁盘, 所以既有着mysql的数据持久化, 也有着memcached的高效率.
redis也支持更多的数据结构(string, list(列表, 队列, 栈), set(集合), sorted sort, hash(hash表))

使用场景

  1. 登入会话储存, 存储在redis中, 与memcached相比, 数据不会丢失
  2. 排行版/计算器: 各种排行信号, 文章的阅读量, 点赞信息
  3. 消息队列: 比如celery使用redis作为中间人
  4. 当前在线人数: 显示当前系统在线人数
  5. 一些常用的数据缓存: 板块信息
  6. 热门文章(帖子)或者评论缓存: 一般用户浏览网站, 只会浏览前面的文章和评论, 那么可以将他们缓存起来, 提高访问效率
    用户访问超过的, 就去访问数据库, 并且新发布的文章会把旧的文章删除
  7. 好友关系: 微博的好友
  8. 发布和订阅功能: 聊天软件

redismemcached比较

memcached redis
类型 纯内存数据管理系统 内存磁盘同步数据库
数据类型 在定义value时固定类型 不需要
虚拟内存 不支持 支持
过期策略 支持 支持
存储数据安全 不支持 可以将数据同步导dump.db中
灾难恢复 不支持 可以从磁盘数据库中恢复到内存中
分布式 支持 主从同步
订阅与发布 不支持 支持

安装与连接(Ubuntu 16.1)

  1. 安装
sudo apt install redis-server
  1. 卸载
sudo apt purge --auto-remove redis-server
  1. 启动, redis默认启动, 可以通过命令查看
ps aux|grep redis
手动启动
```shell
sudo service redis start
```

redis-cli命令操作数据库

  1. 连接
redis-cli -p[端口] -h[ip]
  1. 添加键值对
set username[key] daye[value]
get username[key]
  1. 删除
del username[key]
  1. 过期时间
expires key timeout()

也可以在设置值, 一同设置过期时间
set key value EX timeout setex key timeout value
查看过期时间

ttl username[key]
  1. 查看所有键
key *

操作value中列表

websites www.baidu.com

value插入列表表头, 如果key不存在, 创建一个空列表并执行lpush操作; 如果key存在但不是列表类型, 就会报错

lrange websites[key] 0[start] -1[stop]

返回列表指定[start, 'stop']的元素, [0, -1]就是列表中全部元素

lindex websites 1[index]
llen websites[key]

操作value中集合

sadd school1[key] beida qinghua xian
smembers school1[set]
srem school1[set] xian[member]
scard school1[set]
sadd school2 beida jiaoda dezou
sinter school1[set] school2[set]
sunion school school2
sdiff school1 school2

hash的操作

hset person[key] name[field] DaYe[value]
* `key`: 主键的名称
* `field`: 子键名称
* `value`: 子键的值
hget person[key] name[field]
hgetall person[key]
hvals person[key]
hkeys person[key]

* 删除key的某个field

hdel person[key] name[field]
hexits person[key] name[field]

事务操作

  1. 进入事务
multi
  1. 执行事务
exec
  1. 取消事务
discard
  1. 监视key
watch name[key]

监听一个key, 如果key发生改变, 则事务不会进行
取消监听

unwatch name[key]

发布与订阅

像看门狗一样, 轮询订阅的频道是否有新的消息发布

publish chatrom[Chanel] "Hello Wrold"[message]  
subscribe chatrom[Chanel]

同步机制

redis提供了二个备份策略: RDBADF

RDB AOF
开启关闭 开启: 默认开启. 关闭: 把配置文件中所有的save注释 开启: 在配置文件中appendonly=yes既开启了AOF,为no关闭
同步机制 可以指定某个时间内发生多少个命令进行同步 每秒同步或者每次发生命令同步
储存内容 redis 具体的键和值 执行的写操作命令
存储路径 根据dir以及dbfilename来指定路径和文件名 根据dir以及appendfilename来指定路径和文件名
优点 1. 存储数据到文件会进行压缩, 文件体积较小 </br>2. 因为储存是具体的值,所以回复速度会比AOF更快 3. 非常适用于备份 1.AOF的策略是同步命令, 即使服务器故障, 也只是会丢失1秒的数据 2. AOF存储命令并并直接追加到AOF文件后面, 因此每次备份只需要添加数据即可. 3. 如果文件比较大, 那么Redis将会进行重写, 只保留最小的命令集合
缺点 1. ROB在时间段内触发同步机制, 采用压缩机制, RDB重新保存数据库数据, ==一般设置五分钟备份一次== 2. 数据存入RDB, redis会自动fork一个子进程用来同步, 当同步量大时, 可能会非常耗时 1. AOF文件相比较大, 2.并发大时, 效率可能会很低, 3. 由于备份的是命令, 所以恢复速度远不及RDB

RDB

首先进入redis的配置文件/etc/redis/redis.conf, 找到与RDB有关的配置

save 900 1
save 300 10
save 60 10000
dir /var/bin/redis
dbfillename dump.rdb`

AOF

再次进入redis配置文件查找与AOF有关的配置

appendonly no
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no

redis密码与授权

允许其他ip连接redis

默认只能本机连接, 需要允许其他ip连接本机redis, 则需要修改配置文件

bind 127.0.0.1 192.168.1.1 // 本机的ip地址, 有待考证

用python操作redis

sudo pip3 install redis

to-do list

上一篇 下一篇

猜你喜欢

热点阅读