redis进阶
一、redis介绍
redis的功能特性
1、高速读写
2、数据类型丰富
3、支持持久化
4、多种内存分配及回收策略
5、支持事务
6、消息队列、redis用的多的还是发布-订阅模式
7、支持高可用
8、支持分布式分片集群
linux操作系统是怎么分配内存的?
答:吧内存分三大块。
RSS :
page cache:
anno page: 程序之间进行交互的时候.....#匿名页
linux操作系统以page进行分配内存,page大小默认4kb
slab allocator 内存页的划分
buddy system :LRU最近最少使用的原则
怎么保证使用连续的内存,
slab allocator redis优势
1、redis在单用户(单线程)多并发读写的性能高
2、在多用户(多线程)少读写时memache更优
3、redis是一个单核的管理机制,生产中一般是,单机多实例的框架。
二、redis的使用
下载
安装
解压 tar -zxvf redis-3.2.6.tar.gz
cd redis-2.6.0
make #编译安装
yum install gcc* cd /application/redis-3.2.6/src
./redis-server & #启动redis服务端 ,&后台运行,不然一直占用端口
ps -ef |grep redis #查看是否启动
./redis-cli #连接服务器
三、使用redis
set foo bar
get foo 基本的配置文件
vim /etc/redis.conf #去编辑redis.conf文件 #添加配置
daemonize yes
port 6379
dbfilename dump.rdb
dir "/application/data/6379"
logfile /var/log/redis.log
######
mkdir -p /application/data/6379
ps -ef |grep redis
./redis-server /etc/redis.conf
/application/redis-3.2.6/src/redis-server /etc/redis.conf #为了不用每次都切进去,在环境变量里面设置一下
cd /root
vim .bash_profile
PATh 添加 :/application/redis-3.2.6/src
:wq保存 配置生效
source .bash_profile
redis-cli 配置完成之后,可以直接在命令行调用redis命令
例如:
redis-cli shutdown
或者
redis-server /etc/redis.conf #安全控制(也在配置文件里面设置)
bind 10.0.0.200 #绑定ip10字段
requirepass root #没有用户只有密码,密码为root
redis-cli
shutdown
redis-server /etc/redis.conf
设置完成之后需要换种方式打开:
redis-cli -h 10.0.0.200 -a root #改完配置文件每次都需要重启,不用每次都重启,在线变更配置:
获取当前配置
CONFIG GET *
变更运行配置
CONFIG SET loglevel 'notice'
修改密码
CONFIG SET requirepass ""
CONFIG GET requirepass 在线修改的配置,下次登录生效,但是重启之后配置会丢失 #Python链接redis
import redis
....
四、redis的数据持久化
RDB持久化:快照,只记录一个时刻内存数据状态(快照记录某一时刻的数据)
AOF持久化:只追加日志文件的方式,记录了redis里面所有的修改命令 RDB记录某一时刻的,还可以用做备份
AOF比较安全,但是比较啰嗦,每次都把所有的搜保存下来了 #如果配置持久化功能
方式一:
RDB 持久化配置:还是修改配置文件
dbfilename dump.rbd
dir '/application/data/6379'
save 900 1 900秒内有一个更改
save 300 10 300秒内有10个更改
save 60 10000 60秒内有10000个更改
#也可以设置配置做持久化
方式二:
set foo bar
save 或者 bgsave #手工触发持久化 #配置扩展
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#AOF 配置
appendonly yes
applendfsync every
五、redis数据类型
计数器
incr fensi ##你点击一下增加一下,刷点击量
incrby fensi 10000
DECR fensi #递减
DECRBY fensi 20
set foo bar
set foo ex 10 hset stu(表) id(列) 100
hmset stu id 100 name zhangsna lpush pengyouquan 'today is nice day'
lpush pengyouquan 'today is bad day'
lpush pengyouquan 'today is a day'
lpop pengyouquan #删除最后一条
lrange pengyouquan 0 -1 #查看所有 有序集合:像是排行榜
六、发布订阅模式
发布订阅模式(中间桥梁:频道):朋友圈是很好的证明。先关注你就能看到
开两个端口
PUBLISH weibo hello 先订阅某个频道
SUBSCRIBE weibo 订阅weibo一个频道,subscribe PSUBSCRIBE * 一次性订阅多个频道(广告类)
PSUBSCRIBE it.* 一次性订阅多个和it相关的频道
退出就取消订阅了
七、redis的事务管理
redis使用multi开启事物
discard 撤销
exec UI出
redis 中的锁机制
mysql的悲观锁:我在做操作的时候,你别和我抢,
redis的乐观锁:查看一下,
八、redis的一些管理命令
Info
Clinet list 客户端连接的状况以及对系统的使用情况
Client kill ip:port
config get *
CONFIG RESETSTAT 重置统计
CONFIG GET/SET 动态修改
Dbsize
FLUSHALL 清空所有数据
select 1
FLUSHDB 清空当前库
MONITOR 监控实时指令
九、主从复制
假如说你访问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 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、构建主从
redis-cli -p 6381
slaveof 127.0.0.1 6380
5、验证主从
登录主库:
redis-cli -p 6380 set foo bar
登录主库:
redis-cli -p 6381
get 6、主从复制状态查看。
role
info replication 7、主从复制,手工切换
slaveof no one 传统主从的缺陷
1、没有自动监控机制
2、没有自动切换的功能
3、对于应用不透明 sentinel 功能
1、自动监控redis所有节点状态
2、发现主库故障,自动选主切换
3、自动通知应用端 准备,1主2从结构比较合适。
添加6382节点:
mkdir -p /application/data/6382 vim /application/data/6382/redis.conf port 6382
daemonize yes
pidfile /application/data/6382/redis.pid
logfile "/var/log/redis6382.log"
dbfilename dump.rdb
dir /application/data/6382 redis-server /application/data/6382/redis.conf redis-cli -p 6382 slaveof 127.0.0.1 6380 sentinel配置 mkdir -p /application/data/26380 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
>>> 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进阶的更多相关文章
- Redis进阶实践之十三 Redis的Redis-trib.rb文件详解
一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的角度来阐述一下,对第一次使用的人来说很重要.redis-trib.rb是redis官方推出的管理re ...
- Redis进阶实践之十六 Redis大批量增加数据
一.介绍 有时,Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据,以便尽可能快地创建数百万个键.这就是所谓的批量插入,本文档的目标是提供有关如何以尽可能快的速度向Redis提 ...
- Redis进阶实践之十八 使用管道模式加速Redis查询
一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...
- Redis进阶实践之十三 Redis的Redis-trib.rb脚本文件使用详解
转载来源:http://www.cnblogs.com/PatrickLiu/p/8484784.html 一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的 ...
- Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)
Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...
- Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务(转载6)
Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务 一.引言 今天本来没有打算写这篇文章,但是,今天测试Redis的时候发现了两个问题 ...
- Redis进阶实践之五Redis的高级特性(转载 5)
Redis进阶实践之五Redis的高级特性 一.引言 上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今 ...
- Redis进阶实践之四Redis的基本数据类型(转载4)
Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...
- Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)
Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...
随机推荐
- A*算法(附c源码)
关于A*算法网上介绍的有很多,我只是看了之后对这个算法用c写了一下,并测试无误后上传以分享一下,欢迎指正!下面是我找的一个介绍,并主要根据这个实现的. 寻路算法不止 A* 这一种, 还有递归, 非递归 ...
- SQL SERVER与C#数据类型对照表
分类 SQL SERVER类型 类型说明 C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) ...
- Java 基础生词表
class [klɑːs] : 类 (计算机科学); public ['pʌblɪk] : 公众的; void [vɒɪd] : 无返回类型; main [meɪn] : 主要的; static [' ...
- Hive记录-Hive常用命令操作
1.hive支持四种数据模型 • external table ---外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该 ...
- docker部署路飞学城
docker部署路飞学城blog来啦 部署需求分析: 之前是将nginx.django.vue直接部署在服务器上,既然学了docker,试试怎么部署在docker中 1.环境准备 一台linux服务器 ...
- UVa 11134 Fabled Rooks(贪心)
题目链接 题意 在n*n的棋盘上的n个指定区间上各放1个'车’ , 使他们相互不攻击(不在同行或同列),输出一种可能的方法. 分析 每行每列都必须放车,把行列分开看,若行和列同时有解,则问题有解. ...
- Neural Networks and Deep Learning 课程笔记(第三周)浅层神经网络(Shallow neural networks)
3.1 神经网络概述(Neural Network Overview ) (神经网络中,我们要反复计算a和z,最终得到最后的loss function) 3.2 神经网络的表示(Neural Netw ...
- java基础面试题常出现(一)
1.”==“和equals方法的区别? 1. ==操作符,对于基本数据类型变量,比较的是两个值是否相等,而对于引用类型,比较的是引用的内存的首地址,即引用同一个对象.1 Obeject的equal ...
- 14. Spring Boot的 thymleaf公共页抽取
5).CRUD-员工列表实验要求:1).RestfulCRUD:CRUD满足Rest风格:URI: /资源名称/资源标识 HTTP请求方式区分对资源CRUD操作 普通CRUD(uri来区分操作) ...
- Composer 安装和使用
1.linux下安装 curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer ...