Python And Redis

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]就是列表中全部元素

  • 移除列表元素
    • 移除并返回列表value的尾元素
    rpop websites[key]
    
    • 移除并返回列表value的头元素
    lpop websites[key]
    
    • 移除并返回列表的中间元素
    lrem websites[key] 1[count] www.baidu.com[value]
    
      * `count`, 列表中可能存在重复的元素, 通过`count`参数传入要删除的个数
      * `count` > 0: 从表头开始
      * `count` < 0: 从表尾开始
      * `count` = 0: 将列表中的`value`元素全部删除
    
  • 返回指定的元素
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`: 子键的值
  • 获取hashfield的值
hget person[key] name[field]
  • 获取hash中key对应的所有fieldvalue
hgetall person[key]
  • 获取hash中key对应的value
hvals person[key]
  • 获取hash中key对应的所有field
hkeys person[key]

* 删除key的某个field

hdel person[key] name[field]
  • 判断hash是否存在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`
  • dir+dbfilename决定了RDB策略的备份文件路径和文件名
  • seve 900 1 每900秒发生1次写操作备份一次
  • seve 300 1 每300秒发生1次写操作备份一次
  • seve 60 1 每60秒发生1次写操作备份一次

AOF

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

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

  • appendonly, 控制AOF的启用, 默认为no
  • appendfilename, 备份的文件名 与dir构成, 默认是/var/bin/appendonly.aof
  • appendsync控制备份方式
    • always: 每次数据更新
    • everysec: 每秒备份一次, AOF默认备份方式
    • no: 遵循系统的备份方式, 一般都是每个三十秒备份一次
      注意: 由于默认不开启AOF, 开启后, AOF会自动将当前的键值对进行备份, 然后才会按照备份策略(appendsync配置)备份命令

redis密码与授权

  • 设置密码
    • redis.cof配置文件中, 将requirepass password[password]取消注释, 并指定你的密码, 需要重启后生效
    • 有一种不需要重启的方法, config set requirepass password[password]
  • 使用密码连接redis
    • 连接时使用-a参数指定密码进行连接
    • 也可以先登入之后, 使用auth password[password]命令进行授权

允许其他ip连接redis

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

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

用python操作redis

  • 安装python-redis
sudo pip3 install redis

to-do list

  • [x] redis原生操作和配置介绍 2018/05/10
  • [x] redis备份策略介绍
  • [ ] 使用python操作redis
  • [ ] 使用Java操作redis
    <center>喂完待续..</center>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,963评论 2 27
  • Redis是啥 Redis是一个开源的key-value存储系统,由于拥有丰富的数据结构,又被其作者戏称为数据结构...
    一凡呀阅读 1,172评论 0 5
  • 超强、超详细Redis入门教程 转载2017年03月04日 16:20:02 16916 转载自: http://...
    邵云涛阅读 17,434评论 3 313
  • 由于apicloud中元素的tapmode属性,去掉该属性即可
    chaosii阅读 380评论 0 0
  • 曾经的我们在懵懵懂懂间不断成长,曾经以为伤痛与迷惑就是青春的颜色,后来才发现再回首时,青春的那些痕迹里沉淀的却是最...
    钟离凌羽阅读 611评论 0 0