redis学习

我们常用的数据库一般是关系型数据库,具有严格的二维视图,而非关系行数据库是关系行数据库的补充,它的语法相对简单,最重要的是,它的存储效率非常的高,非常适合作为缓存使用。
常见的非关系型数据库比较有名的是memcached 和redis ,一般我们使用的比较多的是redis,因为其功能较memcached更为强大.现在就介绍下redis数据库的使用


1.redis数据的安装
redis数据库的安装非常简单,直接从官方下载对应版本的(32 64位)的安装包,解压到文件夹中.解压后会有5个exe文件和一个 conf文件
Redis-server –> redis服务器
Redis-cli –> redis的客户端
Redis-benchmark –>redis性能测试工具
Redis-check-aof –>aof文件修复工具
Redis-check-dump –> RDB文件检查工具
redis.windows.conf –>redis的配置文件


2.安装多个redis数据库
非常的简单,只需要复制一下redis的安装包,修改conf文件的端口,这样就能够同时使用多个redis数据库


3.redis数据库的使用
打开方式有两种:
3.1、直接双击Redis-server.exe
3.2、在安装目录打开cmd窗口,redis-cli -h 127.0.0.1 -p 6379


4.redis数据库服务的注册,启动和停止命令
4.1注册服务:redis-server–service-install redis.windows.conf–loglevelverbose
4.2卸载服务:redis-server–service-uninstall
4.3启动redsi:redis-server–service-start
4.4停止redis:redis-server–service-stop


5.redis客户端的使用
redis的java客户端有很多个,官方推荐的有jedis以及Redisson
这篇文章就介绍jedis的操作,下次再介绍Redisson的使用


jedis的依赖

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.8.2</version>
    </dependency>

5.1 jedis的简单例子

import redis.clients.jedis.Jedis;

public class JedisDemo {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.set("jedis-test", "123");
        String value = jedis.get("jedis-test");

        System.out.println(value);//123

        jedis.close();
    }
}

5.2 jedis使用连接池

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

/**
 * jedis连接池的使用
 */
public class JedisPoolDemo {

    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

        //设置最大的连接数和空闲数
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(2);

        //构建连接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"127.0.0.1",6379);
        Jedis jedis = jedisPool.getResource();

        System.out.println(jedis.get("jedis-test"));//123

        //将连接还给连接池并释放连接池
        jedisPool.returnBrokenResource(jedis);
        jedisPool.close();

    }
}

5.3 jedis使用分片式集群

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/**
 * 分片式jedis集群的使用
 */
public class SharedJedisPoolDemo {
    public static void main(String[] args) {

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(2);//最大空闲数

        //定义集群信息
        List<JedisShardInfo> shads = new ArrayList<JedisShardInfo>();
        shads.add(new JedisShardInfo("127.0.0.1",6379));
        shads.add(new JedisShardInfo("192.168.232.1",6380));

        //定义集群连接信息
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(jedisPoolConfig,shads);
        ShardedJedis jedis = null;

        try {
            //可以从两个redis数据库中获取值
            jedis = shardedJedisPool.getResource();
            System.out.println(jedis.get("Emp_4"));
            System.out.println(jedis.get("jedis-test"));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null != jedis){
                jedis.close();
            }
        }

        shardedJedisPool.close();

    }
}

6.spring集成redis的使用

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- redis的配置文件
        poolConfig
        ShardedJedisPool    
     -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"<
        <property name="maxTotal" value="{redis.maxTotal}"></property>
    </bean>

    <bean class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index = "0" value="poolConfig"/>
        <constructor-arg index = "1" >
            <list>
                <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg index="0" value="${redis.model1.host}"/>
                    <constructor-arg index="1" value="${redis.nodel1.port}"/>
                </bean>
            </list>
        </constructor-arg>
    </bean>

</beans>    

7.redis的主要方法

@Service
public class RedisService {

    @Autowired(required= false)
    private ShardedJedisPool shardedJedisPool;

    public <T> T execute(Fun<T,ShardedJedis> fun){
        ShardedJedis shardedJedis = null;
        try {
            //从连接池中获取资源,作为Fun接口的参数
            shardedJedis = shardedJedisPool.getResource();

            //返回一个接口的方法,具体返回值不确定,需要子类去指定
            return fun.callback(shardedJedis);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null != shardedJedis){
                shardedJedis.close();   
            }
        }
        return null;
    }

    /**
     * set方法,指定接口Fun的方法execute的返回值为String,使用了匿名内部类,
     * 参数参数必须为final修饰
     */
    public String set(final String key,final String value){
        return this.execute(new Fun<String,ShardedJedis>(){

            @Override
            public String callback(ShardedJedis e) {
                return e.set(key, value);
            }

        });
    }
    /**
     * 设置key的时候,同时设置有效时间
     */
    public String set(final String key,final String value,final Integer seconds){
        return this.execute(new Fun<String,ShardedJedis>(){

            @Override
            public String callback(ShardedJedis e) {
                return e.setex(key, seconds, value);
            }

        });
    }

    /**
     * get 方法
     */

    public String get(final String key){
        return this.execute(new Fun<String,ShardedJedis>(){

            @Override
            public String callback(ShardedJedis e) {

                return e.get(key);
            }

        });
    }

    /**
     * del方法
     */
    public Long del(final String key){
        return this.execute(new Fun<Long,ShardedJedis>(){

            @Override
            public Long callback(ShardedJedis e) {
                return e.del(key);
            }

        });
    }

    /**
     * 设置key的有效时间
     */
    public Long expire(final String key,final Integer seconds){
        return this.execute(new Fun<Long,ShardedJedis>(){

            @Override
            public Long callback(ShardedJedis e) {
                return e.expire(key, seconds);
            }

        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值