redis 缓存

本篇博客只介绍 redis 作为缓存的的一些使用,以及在项目中如何把redis和spring如何集成。

1:redis的maven依赖,redis 依赖   spring-redis 依赖;

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>${redis.version}</version>
</dependency>

     <dependency>
         <groupId>org.springframework.data</groupId>
         <artifactId>spring-data-redis</artifactId>
         <version>${spring.redis.version}</version>
     </dependency>

2:redis 配置  整合spring的配置

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">   
        <property name="maxIdle" value="1" />
        <property name="maxTotal" value="5" />
        <property name="blockWhenExhausted" value="true" />
        <property name="maxWaitMillis" value="30000" />
        <property name="testOnBorrow" value="true" />
    </bean>


    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="localhost" />
        <property name="port" value="6379"/>
        <property name="poolConfig" ref="jedisPoolConfig" />
        <property name="usePool" value="true"/>
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory"   ref="jedisConnectionFactory" />
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
    </bean>

接下来就可以在项目中使用redis了,这里使用的是spring的redisTemplate,只需要在项目中注入 redisTemplate 就可以直接使用了。

以下为使用redisTemplate来操作redis;

1:redis 中自增的操作:这种自增是原子性的,可以用在高并发的场景,如 库存的秒杀


ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-redis.xml");
RedisTemplate redisTemplate = (RedisTemplate) ctx.getBean("redisTemplate");
// redis 自增
Long beppe = redisTemplate.opsForValue().increment("beppe", 2);
System.out.println(beppe);

2:String 类型的操作

//        String 类型
        ValueOperations valueOpe = redisTemplate.opsForValue();
        valueOpe.set("user:name","哈哈哈");
        String userName = (String)valueOpe.get("user:name");
        System.out.println(userName);

3:list操作;

//        List 类型  list是不去重存储
        ListOperations listOps = redisTemplate.opsForList();
        listOps.leftPush("user:redis","beppe1");
        listOps.leftPush("user:redis","beppe2");
        listOps.leftPush("user:redis","beppe3");
        List list = listOps.range("user:redis", 0, -1);  //这里 0,-1 表示获取 list 所有内容
//        String o = (String)listOps.leftPop("user:redis");
        System.out.println(list);

4:Hash 操作;

//        hash 类型   有两种操作形式 1:put 一个元素一个元素添加   putAll 一次性添加一个Map
        HashOperations opHash = redisTemplate.opsForHash();
//        opHash.put("mykey1","city1","shanghai");
//        opHash.put("mykey2","city2","beijing");
        HashMap<String, String> map = new HashMap<>();
        map.put("city1","shanghai1");
        map.put("city2","shanghai2");
        map.put("city3","shanghai3");
        map.put("city4","shanghai4");
        opHash.putAll("citya:redis",map);
        Map entries = opHash.entries("citya:redis");
        System.out.println(entries);

5:set类型操作;

//        set类型
        SetOperations setOper = redisTemplate.opsForSet();
        Set<String> set = new HashSet<String>();
        set.add("beppe1");
        set.add("beppe2");
        set.add("beppe2");
        set.add("beppe3");
        setOper.add("set:redis",set);
        Set<String> pop = (Set<String>)setOper.pop("set:redis");
        for (String str:
             pop) {
            System.out.println(str);
        }

以上几种就是redis存储数据的几种数据结构的操作;

下篇博客会 介绍使用 redis 来实现发布订阅的功能;

 

posted @ 2017-11-29 10:57  beppezhang  阅读(280)  评论(0编辑  收藏  举报