redis
来源:互联网 发布:淘宝活动报名网站 编辑:程序博客网 时间:2024/05/29 15:32
Mysql
Memcache(缓存)+Mysql+垂直拆分
主从复制读写分离
分表分库+水平拆分+mysql集群
NoSql(不仅仅是ql)
背景: 海量多样实时的大数据, 高并发,高可扩,高性能的互联网需求
NoSql的四大分类:
KV键值 新浪(BerkeleyDB+redis) 美团(redis+tair) 阿里,百度(memcache+redis)
文档型数据库 CouchDB MongoDB
列存储数据库 HBase,分布式文件系统
图关系型数据库 Neo4J InfoGrid 社交网络
传统的ACID
A Atomicity 原子性 C Consistency 一致性
I Isolation 独立性 D Durability 持久性
分布式数据库的CAP
C Consistency 强一致性 A Availability可用性 P Partition tolerance 分区容错性
为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
redis安装:
需要c的编译器 yum install gcc-c++
将tar上传 解压到local tar -zxvf (rides的tarbao) -C /usr/local
进入 解压文件夹 make
安装 make PREFIX=/usr/local/redis install
将源码包的redis.conf复制到安装的bin目录下 cp redis.conf ../redis/bin
后台启动redis服务 ./redis-server
启动redis-cli ./redis-cli
通过java程序对redis 简单操作
package com.wpx.redis;import org.junit.jupiter.api.Test;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;/** * * @author wangpx __ __ * \ \ /\ / / * \ \ /\ \ / / * \ \ / /\ \ / / * \ \ / / \ \ / / * \ /\/ \ \/ / * \/\/ \/\/ * *通过java程序访问Redis数据库 * 套路 * 获取对象 * 操作对象 * Y/N 关闭资源 * * 能不能封装起来便于下次使用 */public class RedisTest { @Test public void test01() { //java+redis jedis //获得对象 Jedis jedis=new Jedis("111.230.21.142",6379); //这个大家也可以访问两天 我装在了腾讯的免费主机上 //获得数据 String name=jedis.get("name"); System.out.println(name); jedis.set("age", "20"); System.out.println(jedis.get("age")); } //通过jedis 的pool获得jedis连接对象 @Test public void test02() { //2.当获对象发现需要一顿乱配置 //1.还是先获取对象 JedisPoolConfig config=new JedisPoolConfig(); //2.还是一顿乱配置 config.setMaxIdle(50); //设置最大闲置个数 config.setMinIdle(10); //设置最小闲置个数 config.setMaxTotal(40); //最大连接数 // 1.获取对象 JedisPool pool =new JedisPool(config,"111.230.21.142",6379); //3.从池子中获取redis的连接资源 Jedis jedis=pool.getResource(); //4.对对象进行相关操作 jedis.set("pool", "JedisPool"); System.out.println(jedis.get("pool")); //5.关闭资源 jedis.close(); pool.close(); //实际运用场景pool一般不管 }}
来个简单的封装
package com.wpx.redis;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class JedisPoolUtils { private static JedisPool jedisPool=null; /** * 配置一个资源文件 redis.properties redis.maxIdle=40 redis.minIdle=10 redis.maxTotal=40 redis.ip=111.230.21.142 redis.port=6379 通过 加载配置资源赋值 */ static { //2.当获对象发现需要一顿乱配置 //1.还是先获取对象 JedisPoolConfig config=new JedisPoolConfig(); //2.还是一顿乱配置 config.setMaxIdle(10); //设置最大闲置个数 config.setMinIdle(3); //设置最小闲置个数 config.setMaxTotal(20); //最大连接数 // 1.获取对象 jedisPool =new JedisPool(config,"111.230.21.142",6379); } //获取Jedis对象 public static Jedis getJedis() { return jedisPool.getResource(); } public static void main(String[] args) { System.out.println( getJedis().get("pool")); }}
1.字符串的简单操作
数值的增减
value的值追加
免费的主机就是会一直断
2.哈希
结构相当于Map<key1,Map<key11,value>>
也可以理解为二重菜单 大菜单 二级菜单 具体产品
设多个值
取出全部
删除年龄
是否存在
所有key ,val
3.list
类似于Map<key,List<value>>
左 l 右 r 相对应
弹栈
当然也会有
list删除 需要说明一下 lrem mylist(list的key) 2(删除的数量) a
数量前加负号 表示从右边开始删除 -2 a 表示从右开始删除2个val为a的数据
4.set
容易理解不同于list的就是他是唯一的
差集 一个set 减去和 第二set 共有的部分
5.sortedset
前面的数字为权重
实际上还可以查询带权重
当然一些类似操作没必要过多解释
6.在五种操作的类型中的通用操作
?代表一个字符 *为 任意字符
设置查看过期时间
7.redis的移库操作
先对redis的数据库有个大体的概念
将myset移到一号库
删除所有
8.消息订阅和发布
subscribe wpx(订阅的频道)
publish wpx content(发布的内容)
9.redis的事务
multi:开启事务用于事务的开始,之后执行的命令都被存入到命令队列,直到执行exec
exec:提交事务,类似于关系型数据库中的commit
discard:事务回滚
10.redis的持久化
redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式,可以单独使用其中一种或一起使用
RDB持久化(默认支持,无需配置)
指定时间间隔内将内存中的快照写入磁盘
900秒 一个key发生变化 一次快照
AOF
像记录日志那样记录服务器的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库的数据是完整的
默认是关闭的
1.每次有数据修改发生变化都会写入AOF文件
2.每秒同步一次,
3.从不同步
Redis的主从复制:
将redis.conf复制一份 修改参数pid 指定端口 log文件名字 dump.rdb名字
主机挂了,回来还是主机
从机挂了,回来需要重新连接
从机不具备写的能力
从机连接之前的数据也可以拿到
SLAVEOF no one
停止与其他数据库的同步转成主数据库
复制原理:
slave启动成功连接到master后会发送一个sync的命令
Master接到命令启动后台的存盘进程,同时收集所有收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步,每次重新建立关系都会进行一次完全同步
哨兵模式
新建一个 用于配置哨兵
sentinel.conf
开启哨兵
类似于直接插入排序的监视哨,当主机挂掉,会从丛机中投票决定谁成为master
Redis集群
新建一个文件夹redis-cluster
把redis的bin文件全复制过去改个名字1-6自己分的清楚就好了
找到redis的安装目录src下找到rb的脚本
把相关的全部复制到集群的目录下面
安装ruby和相关依赖
yum install ruby
gem install redis-3.0.0.gem
写个批处理
顺带的把执行的文本写下来到read.me
执行操作
- Redis
- redis
- Redis
- redis
- Redis
- redis
- Redis
- redis
- REDIS
- Redis
- Redis
- redis
- Redis
- Redis
- Redis
- Redis
- Redis
- Redis
- go语言学习-变量
- MOOC课程资源
- 风火轮 树莓派3 android系统编译
- 海量数据处理算法—Bloom Filter
- [深度学习论文笔记][arxiv 1711] Non-local Neural Networks
- redis
- XGBoost解析系列-原理
- map poj2503 Babelfish
- 2017-11-04-linux-控制台乱码
- [学习笔记]Python_常见错误
- webstorm js调试工具
- jQuery学习之三---工具
- Java final关键字的理解
- 机器学习-决策树