redis安装和简单案例演示

一、安装redis

1、下载redis

wget http://download.redis.io/releases/redis-4.0.8.tar.gz

2.解压

tar xzvf redis-4.0.8.tar.gz -C /usr/local/

3.安装(如果没有gcc环境,需要安装gcc:yum install gcc-c++)

cd /usr/local/
mv redis-4.0.8 redis
cd redis
make
cd ./src
make install PREFIX=/usr/local/redis

4、移动配置文件到安装目录下

cd /usr/local/redis
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc

5、配置redis为后台启动

vi /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes

在这里插入图片描述
6、开启redis

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 

8、将redis-cli,redis-server拷贝到bin下,让redis-cli指令可以在任意目录下直接使用

cp /usr/local/redis/bin/redis-server /usr/local/bin/
cp /usr/local/redis/bin/redis-cli /usr/local/bin/

9、设置redis密码
(1)运行命令:redis-cli
(2)运行命令:config set requirepass ****(****为你要设置的密码),设置成功的话会返回‘OK’字样
(3)测试连接,重启redis服务
(4)进入命令行模式:redis-cli -h 127.0.0.1 -p 6379 -a ****(****为你设置的密码)
在这里插入图片描述
10、让外网能够访问redis
修改redis.conf文件
(1)注释掉127.0.0.1
在这里插入图片描述
(2)把protected-mode yes 改为 no
在这里插入图片描述

二、Java API

1、pom.xml

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

2、 单实例连接redis

@Test
    public void testJedisSingle() {
        //创建jedis对象,需要指定Redis服务的ip和端口
        Jedis jedis = new Jedis("192.168.100.102", 6379);
        //直接操作数据库
        jedis.set("name", "bar");
        //获取数据
        String name = jedis.get("name");
        System.out.println(name);
        //关闭jedis
        jedis.close();
    }

运行后在查看
在这里插入图片描述
3、Redis Java List(列表) 实例

@Test
    public void RedisListJava () {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("192.168.100.102", 6379);
        System.out.println("连接成功");
        //存储数据到列表中
        jedis.lpush("site-list", "Runoob");
        jedis.lpush("site-list", "Google");
        jedis.lpush("site-list", "Taobao");
        // 获取存储的数据并输出
        List<String> list = jedis.lrange("site-list", 0 ,2);
        for(int i=0; i<list.size(); i++) {
            System.out.println("列表项为: "+list.get(i));
        }
    }

运行后在查看
在这里插入图片描述
4、使用连接池连接

 @Test
    public void pool() {
        JedisPoolConfig config = new JedisPoolConfig();
        //最大连接数
        config.setMaxTotal(30);
        //最大连接空闲数
        config.setMaxIdle(2);

        JedisPool pool = new JedisPool(config, "192.168.100.102", 6379);
        Jedis jedis = null;

        try  {
            jedis = pool.getResource();

            jedis.set("name", "zhangsan");
            String name = jedis.get("name");
            System.out.println(name);
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if(jedis != null){
                //关闭连接
                jedis.close();
            }
        }
    }

运行后在查看
在这里插入图片描述

三、简单的秒杀案例

1、TestMs.java

package com.hadoop.redis;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import redis.clients.jedis.Jedis;

public class TestMs {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.100.102");
        jedis.set("iphone8","100");
        jedis.close();
        //玩多线程
        ExecutorService executor = Executors.newFixedThreadPool(20);

        for(int i = 0 ; i < 1000; i++){
            executor.execute(new SaleRunable("user"+i));
        }
        executor.shutdown();
    }
}

2、SaleRunable.java

package com.hadoop.redis;

import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class SaleRunable implements Runnable{
    String productKey="iphone8";//监视的key 当前秒杀商品的数量
    Jedis jedis = new Jedis("192.168.100.102");
    String userName;
    public SaleRunable(String userName){
        this.userName = userName;
    }

    @Override
    public void run(){
        //商品的key , 秒杀有个数量
        //watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断
        jedis.watch(productKey);
        String value = jedis.get(productKey);
        int num = Integer.valueOf(value);
        //这次秒杀的商品是100个iphone8
        if(num<=100&&num>=1){
            //开启事务
            Transaction tx = jedis.multi();
            //减少一个商品数量
            tx.incrBy(productKey, -1);
            //提交事务,如果商品数量发生了改动 则会返回null
            List<Object> list = tx.exec();
            if(list==null || list.size()==0){
                System.out.println(userName+"商品抢购失败!");
            }else{
                for(Object success : list){
                    System.out.println(userName+"("+success.toString()+")商品抢购成功,当前抢购成功的人数是:"+(1-(num-100)));
                }
            }
        }else{
            System.out.println(userName+"商品已经被抢完了");
        }
        jedis.close();
    }
}

3、运行TestMs.java程序
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值