Redis

2018-12-05  本文已影响0人  虫儿飞ZLEI

1.Redis

1.1 特点

减弱了一致性换取了更好的性能

数据都是缓存在内存中,可以周期的把更新的数据写入磁盘或者追加到日志文件中(AOF)

1.2 优缺点

优点:

2. 安装

安装

设置密码(没啥必要):redis.conf
requirepass ****

登录:redis-cli -a ****

3. 数据类型

展示所有key:keys *
清空所有key:flushdb

3.1 String

3.2 hash

存取hash

hmset,hmget批量存取


hsetnx:参考setnx
hincrby:参上
hdecrby:参上
hdel:删除hash的field
hkeys:列出hash的field
hlen:返回hash有多少个键
hvals:返回hash的所有value
hgetall:返回hash里面的所有key和value

3.3 list

lpush rpush

-lindex list名 n:返回n位置的元素

3.4 set

string类型的无序集合(不允许有重复)

3.5 zset

有序的集合


有序的

4. 其他命令

5. 主从复制

配置,修改从机器的redis.conf配置文件
slaveof 192.168.60.134 6379

但是我配置了却没有作用,不知道为什么从机连不上主机,于是在一个机器上模拟运行多个redis

  1. 创建文件夹:


    创建主从文件夹
  2. 复制redis.conf到三个文件夹并配置:

bind 192.168.60.137(本机ip)
设置port 6379,6380,6381
设置dir:比如6380:dir /usr/local/redis-zhucongfuzhi/cong-6380/

  1. 运行三个server实例(模拟三台机器)
../redis-3.0.1/bin/redis-server ./zhu-6379/redis.conf
../redis-3.0.1/bin/redis-cli -h 192.168.60.137 -p 6379

../redis-3.0.1/bin/redis-server ./cong-6380/redis.conf
../redis-3.0.1/bin/redis-cli -h 192.168.60.137 -p 6380

../redis-3.0.1/bin/redis-server ./cong-6381/redis.conf
../redis-3.0.1/bin/redis-cli -h 192.168.60.137 -p 6381

主机info:


主机master

从机info:


从机salve
  1. 成功之后,从机将只能读不能写,主机写的东西会同步到从机
    主机set 值,在主从机都可以拿到。

6.哨兵

哨兵

7. redis事务

事务 问题

8.持久化机制

redis数据是保存在内存中的,持久化机制是指将内存中的数据保存在硬盘上

9.发布订阅

发布:publish cctv aaa
订阅:subscribe cctv
继续使用上面5使用的主从机:


主机
从机1
从机2

10.java

package com.ithiema.jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisTest {

    //通过java程序访问redis数据库

    
    @Test
    //获得单一的jedis对象操作数据库
    public void test1(){
        
        //1、获得连接对象
        Jedis jedis = new Jedis("192.168.186.131", 6379);
        
        //2、获得数据
        String username = jedis.get("username");
        System.out.println(username);
        
        //3、存储
        jedis.set("addr", "北京");
        System.out.println(jedis.get("addr"));

        
    }
    
    
    //通过jedis的pool获得jedis连接对象
    @Test
    public void test2(){
        //0、创建池子的配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(30);//最大闲置个数
        poolConfig.setMinIdle(10);//最小闲置个数
        poolConfig.setMaxTotal(50);//最大连接数
        
        //1、创建一个redis的连接池
        JedisPool pool = new JedisPool(poolConfig, "192.168.186.131", 6379);
        
        //2、从池子中获取redis的连接资源
        Jedis jedis = pool.getResource();
        
        //3、操作数据库
        jedis.set("xxx","yyyy");
        System.out.println(jedis.get("xxx"));
        
        //4、关闭资源
        jedis.close();
        pool.close();
        
    }
}
package com.ithiema.jedis;

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 pool = null;
    
    static{
        
        //加载配置文件
        InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties pro = new Properties();
        try {
            pro.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //获得池子对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
        poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
        poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
        pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
    }

    //获得jedis资源的方法
    public static Jedis getJedis(){
        return pool.getResource();
    }
    
    public static void main(String[] args) {
        Jedis jedis = getJedis();
        System.out.println(jedis.get("xxx"));
    }   
}

存储和查询对象(带条件)
https://www.bilibili.com/video/av34488241/?p=15

11.集群搭建并使用

11.1 搭建

  1. 需要对每个机器配置


    配置redis.conf

2,4可以不用配,3不确定是否必须配,6最好和每个节点对应

  1. 安装ruby相关的东西(用来执行后面的redis-trib.rb脚本)
    yum install ruby
    yum install rubygems
    yum install redis
    ps:需要ruby2.2.2以上版本,如果自动安装的版本过低的话:https://www.cnblogs.com/PatrickLiu/p/8454579.html

  2. 启动6个redis

  3. 开始搭建集群(redis-trib.rb在redis的src目录下)
    ./redis-trib.rb create --replicas 1 192.168.0.100:7001 192.168.0.100:7002 192.168.0.100:7003 192.168.0.100:7004 192.168.0.100:7005 192.168.0.100:7006

ps:replicas 1表示一个比值(主机/从机),这里是1的话,就表示一半一半,三个主机,三个从机。并且是按照命令的顺序来的,比如这里7001,7002,7003就是主机,7004,7005,7006是从机,并且7001是7004的从机,7002是7005的从机,7003是7006的从机

  1. 创建一个文件夹redis-cluster

  2. 在redis-cluster文件夹下创建多个文件夹(7001,7002,7003,7004,7005,7006),主要是用来区分不同的机器


    文件夹
  3. 配置每一个redis.conf
    将redis.conf复制到7001-7006文件夹,并配置


    配置redis.conf
  4. 启动6个redis

  5. 开始搭建集群(redis-trib.rb在redis的src目录下)
    ./redis-trib.rb create --replicas 1 192.168.0.100:7001 192.168.0.100:7002 192.168.0.100:7003 192.168.0.100:7004 192.168.0.100:7005 192.168.0.100:7006

搭建集群 集群搭建好是这样的

11.2 使用

/usr/local/redis-3.0.1/bin/redis-cli -c -h 192.168 .0.100 -p 7001
进入客户端,-c:集群模式,-h:ip,-p:端口号

cluster nodes:查看节点


节点

存取数据:


会自动切换节点

11.3 java使用

java使用
上一篇 下一篇

猜你喜欢

热点阅读