redis之进阶

  redis

redis介绍

redis的功能特性

  1. 1,高速读写
  2. 2,数据类型丰富
  3. 3,支持持久化
  4. 4,多种内存分配及回收策略
  5. 5,支持事务
  6. 6,消息队列、redis用的多的还是发布-订阅模式
  7. 7,支持高可用
  8. 8,支持分布式分片集群

linux操作系统是怎么分配内存的?

  1. 把内存分为三大块
  2. PSS
  3. page cache
  4. anno page:程序之间进行交互的时候。。。。#匿名页
  5. linux操作系统以page进行分配内存,page大小默认4kb
  6. slab allocator 内存页的划分

怎么保证使用连续的内存

  1. slab allocator

redis的优势

  1. 1redis在单用户(单线程)多并发读写的性能高
  2. 2、在多用户(多线程)少读写时memache更优
  3. 3redis是一个单核的管理机制,生产中一般是,单机多实例的框架

redis的使用

  1. 下载
  2. 安装
  3. 解压 tar -zxvf redis-3.2.6.tar.gz
  4. cd redis-2.6.0
  5. make #编译安装
  6. yum install gcc*
  7. cd /application/redis-3.2.6/src
  8. ./redis-server & #启动redis服务端 ,&后台运行,不然一直占用端口
  9. ps -ef |grep redis #查看是否启动
  10. ./redis-cli #连接服务器

使用redis

 
set foo bar
get foo

  1. 基本的配置文件
  2. vim /etc/redis.conf #去编辑redis.conf文件
  3. #添加配置
  4. daemonize yes
  5. port 6379
  6. dbfilename dump.rdb
  7. dir "/application/data/6379"
  8. logfile /var/log/redis.log
  9. ######
  10. mkdir -p /application/data/6379
  11. ps -ef |grep redis
  12. ./redis-server /etc/redis.conf
  13. /application/redis-3.2.6/src/redis-server /etc/redis.conf
  14. #为了不用每次都切进去,在环境变量里面设置一下
  15. cd /root
  16. vim .bash_profile
  17. PATh 添加 :/application/redis-3.2.6/src
  18. :wq保存
  19. 配置生效
  20. source .bash_profile
  21. redis-cli
  22. 配置完成之后,可以直接在命令行调用redis命令
  23. 例如:
  24. redis-cli shutdown
  25. 或者
  26. redis-server /etc/redis.conf
  27. #安全控制(也在配置文件里面设置)
  28. bind 10.0.0.200 #绑定ip10字段
  29. requirepass root #没有用户只有密码,密码为root
  30. redis-cli
  31. shutdown
  32. redis-server /etc/redis.conf
  33. 设置完成之后需要换种方式打开:
  34. redis-cli -h 10.0.0.200 -a root
  35. #改完配置文件每次都需要重启,不用每次都重启,在线变更配置:
  36. 获取当前配置
  37. CONFIG GET *
  38. 变更运行配置
  39. CONFIG SET loglevel 'notice'
  40. 修改密码
  41. CONFIG SET requirepass "123"
  42. CONFIG GET requirepass
  43. 在线修改的配置,下次登录生效,但是重启之后配置会丢失
  44. #Python链接redis
  45. import redis
  46. ....

redis的数据持久化

  1. RDB持久化:快照,只记录一个时刻内存数据状态(快照记录某一时刻的数据)
  2. AOF持久化:只追加日志文件的方式,记录了redis里面所有的修改命令
  3. RDB记录某一时刻的,还可以用做备份
  4. AOF比较安全,但是比较啰嗦,每次都把所有的搜保存下来了
  5. #如果配置持久化功能
  6. 方式一:
  7. RDB 持久化配置:还是修改配置文件
  8. dbfilename dump.rbd
  9. dir '/application/data/6379'
  10. save 900 1 900秒内有一个更改
  11. save 300 10 300秒内有10个更改
  12. save 60 10000 60秒内有10000个更改
  13. #也可以设置配置做持久化
  14. 方式二:
  15. set foo bar
  16. save 或者 bgsave #手工触发持久化
  17. #配置扩展
  18. stop-writes-on-bgsave-error yes
  19. rdbcompression yes
  20. rdbchecksum yes
  21. #AOF 配置
  22. appendonly yes
  23. applendfsync every

redis数据类型

  1. 计数器
  2. incr fensi ##你点击一下增加一下,刷点击量
  3. incrby fensi 10000
  4. DECR fensi #递减
  5. DECRBY fensi 20
  6. set foo bar
  7. set foo ex 10
  8. hset stu(表) id(列) 100
  9. hmset stu id 100 name zhangsna
  10. lpush pengyouquan 'today is nice day'
  11. lpush pengyouquan 'today is bad day'
  12. lpush pengyouquan 'today is a day'
  13. lpop pengyouquan #删除最后一条
  14. lrange pengyouquan 0 -1 #查看所有
  15. 有序集合:像是排行榜

发布订阅模式

  1. 发布订阅模式(中间桥梁:频道):朋友圈是很好的证明。先关注你就能看到
  2. 开两个端口
  3. PUBLISH weibo hello 先订阅某个频道
  4. SUBSCRIBE weibo 订阅weibo一个频道,subscribe
  5. PSUBSCRIBE * 一次性订阅多个频道(广告类)
  6. PSUBSCRIBE it.* 一次性订阅多个和it相关的频道
  7. 退出就取消订阅了

redis的事物管理

  1. redis使用multi开启事物
  2. discard 撤销
  3. exec 退出
  4. redis 中的锁机制
  5. mysql的悲观锁:我在做操作的时候,你别和我抢,
  6. redis的乐观锁:查看一下,

redis的一些管理命令

  1. Info
  2. Clinet list 客户端连接的状况以及对系统的使用情况
  3. Client kill ip:port
  4. config get *
  5. CONFIG RESETSTAT 重置统计
  6. CONFIG GET/SET 动态修改
  7. Dbsize
  8. FLUSHALL 清空所有数据
  9. select 1
  10. FLUSHDB 清空当前库
  11. MONITOR 监控实时指令

主从复制

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
  1. 假如说你访问redis呢,访问不了呢,数据查看不了了,怎么办?
    我们要做到一个恢复的功能,所以就有了主从复制的功能
    假如说一个机器废了,还有另一个机器能提供数据
    至少要有两台服务器
    主从复制的两种功能
    1、可以实现故障的转移 failover
    2、可以分担多节点的压力 blance
    底层原理依赖于
    同步传输rbd存储的机制
    怎么搭建主从?
    准备2台或以上的redis实例
    1、多配置文件(端口、数据路径、日志路径、pid
    端口、:6380(主),6381(从)
    数据路径:
    /application/data/6380
    /application/data/6381
    日志路径
    /var/log/redis6380.log
    /var/log/redis6381.log
    pid :记录一个程序进程号的id
    /application/data/6380/redis.pid
    /application/data/6381/redis.pid
    2、主从复制的配置过程
    1、创建目录
    mkdir -p /application/data/6380
    mkdir -p /application/data/6381
    2、配置文件准备
    vim /application/data/6380/redis.conf
    port 6380
    daemonize yes
    pidfile /application/data/6380/redis.pid
    logfile "/var/log/redis6380.log"
    dbfilename dump.rdb
    dir /application/data/6380
  2.  
  3. vim /application/data/6381/redis.conf
    port 6381
    daemonize yes
    pidfile /application/data/6381/redis.pid
    logfile "/var/log/redis6381.log"
    dbfilename dump.rdb
    dir /application/data/6381
    3、启动两个实例
    redis-server /application/data/6380/redis.conf
    redis-server /application/data/6381/redis.conf
  4.  
  5. 4、构建主从
    redis-cli -p 6381
    slaveof 127.0.0.1 6380
    5、验证主从
    登录主库:
    redis-cli -p 6380
  6.  
  7. set foo bar
    登录主库:
    redis-cli -p 6381
    get
  8.  
  9. 6、主从复制状态查看。
    role
    info replication
  10.  
  11. 7、主从复制,手工切换
    slaveof no one
  12.  
  13. 传统主从的缺陷
    1、没有自动监控机制
    2、没有自动切换的功能
    3、对于应用不透明
  14.  
  15. sentinel 功能
    1、自动监控redis所有节点状态
    2、发现主库故障,自动选主切换
    3、自动通知应用端
  16.  
  17. 准备,12从结构比较合适。
    添加6382节点:
    mkdir -p /application/data/6382
  18.  
  19. vim /application/data/6382/redis.conf
  20.  
  21. port 6382
    daemonize yes
    pidfile /application/data/6382/redis.pid
    logfile "/var/log/redis6382.log"
    dbfilename dump.rdb
    dir /application/data/6382
  22.  
  23. redis-server /application/data/6382/redis.conf
  24.  
  25. redis-cli -p 6382
  26.  
  27. slaveof 127.0.0.1 6380
  28.  
  29. sentinel配置
  30.  
  31. mkdir -p /application/data/26380
  32.  
  33. vim /application/data/26380/sentinel.conf
    port 26380
    dir "/application/data/26380"
    sentinel monitor mymaster 127.0.0.1 6380 1
    sentinel down-after-milliseconds mymaster 60000
    sentinel config-epoch mymaster 0
    启动
    redis-sentinel /application/data/26380/sentinel.conf

Python sentinel

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  1. >>> from redis.sentinel import Sentinel
    >>> sentinel = Sentinel([('127.0.0.1', 26380)], socket_timeout=0.1)
    >>> sentinel.discover_master('mymaster')
    ('127.0.0.1', 6379)
    >>> sentinel.discover_slaves('mymaster')
    [('127.0.0.1', 6380)]
    >>> master = sentinel.master_for('mymaster', socket_timeout=0.1)
    >>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
    >>> master.set('foo', 'bar')
    >>> slave.get('foo')
    'bar'

redis之进阶的更多相关文章

  1. Linux-基础学习(六)-Redis的进阶学习

    1. redis的进阶操作 1.1 redis的订阅操作 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE chan ...

  2. ssm 整合 redis(进阶教程)

    最后我建议大家使用 Spring StringRedisTemplate 配置,参阅: http://blog.csdn.net/hanjun0612/article/details/78131333 ...

  3. Redis高级进阶

    目录 本章目标 Redis配置文件 Redis存储 Redis事务 Redis发布订阅 Redis安全 本章目标 Redis配置文件 Redis的存储 Redis的事务 Redis发布订阅 Redis ...

  4. 06 python操作MySQL和redis(进阶)

    python操作mysql.redis 阶段一.mysql事务 主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息, ...

  5. 05 redis(进阶)

    redis 阶段一.认识redis 1.什么是redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remo ...

  6. Redis高级进阶(二)

    一.消息通知 在一些网站上,经常会有一些发布/订阅或者邮件订阅的功能,尤其一些博客上.其实这种问题很常见,当页面需要进行如发送邮件.复杂的计算时会阻塞页面的渲染.为了避免用户等待太久,应该使用其他进程 ...

  7. Redis高级进阶(一)

    一.redis中的事务 在关系型数据库中事务是必不可少的一个核心功能,生活中也是处处可见,比如我们去银行转账,首先需要将A账户的钱划走,然后存到B账户上,这两个步骤必须在同一事务中,要么都执行,要么都 ...

  8. Redis入门--进阶详解

    Redis NoSql入门和概述 入门概述 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付,在那个时候, ...

  9. KV型内存数据库Redis

    Redis是开源的高性能内存Key-Value数据库, 可以提供事务和持久化支持, 并提供了TTL(time to life)服务. Redis采用单线程数据操作+非阻塞IO的模型,非阻塞IO提供了较 ...

随机推荐

  1. 51nod 1610

    题目 神犇题解 所以说鄙人的姿势水平完全不够啊OTZ. 很naive的想法是O(T*v*m)的,据说卡一卡可以过去.题目要求的东西其实是这个: $ \sum\limits_{i = 1}^v {\mu ...

  2. FZU 2091 播放器 (栈)

    记住:!!!栈用完之后,在下次使用的时候一定要初始化!!花费了我一上午的时间,最后还是某杰想出来的. 题意:实现一个音乐播放器的操作,有3种操作. 注意:一开始播放器会播放播放列表中的第一首歌,也就是 ...

  3. spring2.5整合struts2

    首先第一步: 导入jar包: 我的做法: 导入你的基本使用的spring的jar包 和基本使用的struts2的jar包 然后struts2中有一个和spring整合的jar包一定要导入,不然会抛异常 ...

  4. 基于django封装的常用装饰器和函数

    1:返回操作成功的json数据 def response_success(message, data=None, data_list=[]): return HttpResponse(json.dum ...

  5. select查询语句执行顺序

    查询中用到的关键词主要包含六个,并且他们的顺序依次为select--from--where--group by--having--order by其中select和from是必须的,其他关键词是可选的 ...

  6. 一个节点rac+单节点dg网络配置(listener.ora与tnsnames.ora)

    环境说明:  实验环境是 一个节点的 rac + 单机dg    (主备全部用asm存储) tnsnames.ora  文件  (oracle用户) node 1 : node1-> pwd / ...

  7. .Net 学习资源整理

    01.Visual Studio 隐藏的财富 --- C# 语言规范 安装完Visual Studio之后,我们好像忽略了,微软给我们准备的<C# 语言规范>. 路径参考下图: 02.MS ...

  8. js中变量声明提前

    demo1: var a=10; function b(){alert(a); var a=20; alert(a)} b()//undefined 20 因为:js编译器在执行b这个函数时,会把函数 ...

  9. CodeForces 1097G. Vladislav and a Great Legend

    题目简述:给定$n \leq 10^5$个节点的树$T = (V, E)$,令$X \subseteq V$表示一个非空节点集合,定义$f(X)$为包含$X$的最小子树的边数.求 $$ \sum_{\ ...

  10. WPF ChangePropertyAction中TargetName和TargetObject的区别

    在wpf页面布局中经常用到ChangePropertyAction来更改属性,在这个里面有TargetName和TargetObject两个属性,都表示需要修改的控件名称,那么这两个有什么区别呢,通过 ...