• RedisTemplate访问Redis数据结构(一)——String


    当对String数据结构进行操作时,推荐直接使用spring-data-redis提供的StringRedisTemplate,其配置如下

    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
        <property name="connectionFactory" ref="jedisConnFactory" />  
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property> 
    </bean>

    RedisTemplate使用ValueOperations对String类型进行基本操作。首先初始化spring工厂获得redisTemplate和opsForValue

    private RedisTemplate<String,String> stringTemplate;
        private ValueOperations<String, String> opsForValue;
    
        @SuppressWarnings("unchecked")
        @Before
        public void before(){
            //初始化
            @SuppressWarnings("resource")
            ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
            stringTemplate = (RedisTemplate<String,String>)context.getBean("stringRedisTemplate");
            opsForValue = stringTemplate.opsForValue();
        }

    下面使用Junit4测试工具进行演示,各位同学可以直接粘贴源代码自行测试使用,前提是你已经安装和配置好redis哦。

    V get(Object key);
        @Test
        public void  testSet(){
            //删除健(每次测试前我都会对当前测试的键进行删除,防止影响测试结果)
            stringTemplate.delete("liu1");
            opsForValue.set("liu1", "liu1");
            System.out.println(opsForValue.get("liu1"));//liu1
        }
    void set(K key, V value, long timeout, TimeUnit unit);
        @Test
        public void  testSetTimeOut() throws InterruptedException{
            stringTemplate.delete("liu2");
            //加了失效机制
            opsForValue.set("liu2", "liu2", 10, TimeUnit.SECONDS);
            Thread.sleep(5000);
            System.out.println(opsForValue.get("liu2"));//liu2
            Thread.sleep(5000);
            System.out.println(opsForValue.get("liu2"));//null
        }
    Boolean setIfAbsent(K key, V value);
      @Test
        public void  testSetIfAbsent(){
            stringTemplate.delete("liu4");
            stringTemplate.delete("liu5");
            opsForValue.set("liu4", "liu4");
            System.out.println(opsForValue.setIfAbsent("liu4", "liu4"));//false
            System.out.println(opsForValue.setIfAbsent("liu5", "liu5"));//true
        }
    void multiSet(Map < ? extends K, ? extends V > map);
    List multiGet(Collection < K > keys);
    Boolean multiSetIfAbsent(Map< ? extends K, ? extends V > map);
        @Test
        public void  testMultiSetAndGet (){
            stringTemplate.delete("liu6");
            stringTemplate.delete("liu7");
            stringTemplate.delete("liu8");
            stringTemplate.delete("liu9");
            Map<String,String> param = new HashMap<String,String>();
            param.put("liu6", "liu6");
            param.put("liu7", "liu7");
            param.put("liu8", "liu8");
            //为多个键分别设置它们的值
            opsForValue.multiSet(param);
            List<String> keys = new ArrayList<String>();
            keys.add("liu6");
            keys.add("liu7");
            keys.add("liu8");
            //为多个键分别取出它们的值
            List<String> results = opsForValue.multiGet(keys);
            for (String result : results) {
                System.out.println(result);
                /*
                    liu6
                    liu7
                    liu8
                 */
            }
            param.clear();
            param.put("liu8", "hahaha");
            param.put("liu9", "liu9");
            //为多个键分别设置它们的值,如果存在则返回false,不存在返回true
            System.out.println(opsForValue.multiSetIfAbsent(param));//false
            System.out.println(opsForValue.get("liu8"));//liu8
        }
    V getAndSet(K key, V value);
        @Test
        public void  testGetAndSet(){
            stringTemplate.delete("liu9");
            opsForValue.set("liu9", "liu9");
            //设置键的字符串值并返回其旧值
            System.out.println(opsForValue.getAndSet("liu9", "haha"));//liu9
            System.out.println(opsForValue.get("liu9"));//haha
        }
    Long increment(K key, long delta);
    Double increment(K key, double delta);
        @Test
        public void  testIncrement(){
            stringTemplate.delete("liu10");
            opsForValue.set("liu10", "6");
            //值增长,支持整形和浮点型
            System.out.println(opsForValue.increment("liu10", 1));//7
            System.out.println(opsForValue.increment("liu10", 1.1));//8.1
            opsForValue.set("liu10", "liu10");
            opsForValue.increment("liu10", 1);//redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range
        }
    Integer append(K key, String value);
        @Test
        public void  testAppend(){
            stringTemplate.delete("liu11");
            stringTemplate.delete("liu12");
            //如果key已经存在并且是一个字符串,则该命令将该值追加到字符串的末尾。如果键不存在,则它被创建并设置为空字符串,因此APPEND在这种特殊情况下将类似于SET。
            opsForValue.append("liu11", "liu11");
            System.out.println(opsForValue.get("liu11"));//liu11
            opsForValue.set("liu12", "liu12");
            opsForValue.append("liu12", "haha");
            System.out.println(opsForValue.get("liu12"));//liu12haha
        }
    String get(K key, long start, long end);
        @Test
        public void  testGetPart(){
            stringTemplate.delete("liu13");
            opsForValue.set("liu13", "liu13");
            //截取key所对应的value字符串
            System.out.println(opsForValue.get("liu13", 0, 2));//liu
        }
    void set(K key, V value);
        @Test
        public void  testSize(){
            stringTemplate.delete("liu14");
            opsForValue.set("liu14", "liu14");
            //返回key所对应的value值得长度
            System.out.println(opsForValue.size("liu14"));//5
        }
    Boolean setBit(K key, long offset, boolean value);
       @Test
        public void  testSetBit(){
            stringTemplate.delete("liu15");
            //true为1,false为0
            opsForValue.set("liu15", "liu15");
            //对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
            //key键对应的值value对应的ASCII码,在offset的位置(从左向右数)变为value
            System.out.println(opsForValue.setBit("liu15", 13, true));//false
            System.out.println(opsForValue.get("liu15"));//lmu15
            for(int i = 0 ; i<"liu15".length()*8;i++){
                if(opsForValue.getBit("liu15", i)){
                    System.out.print(1);
                }else{
                    System.out.print(0);
                }
                //0110110001101101011101010011000100110101
            }
        }

    转载自:https://blog.csdn.net/weixin_37490221/article/details/78134521

  • 相关阅读:
    /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:在函数‘_start’中: (.text+0x20):对‘main’未定义的引用
    W: 仓库 “http://ppa.launchpad.net/levi-armstrong/qt-libraries-trusty/ubuntu xenial Release” 没有 Release 文件。
    sudo apt-get常用命令
    Windows 下 MQTT 服务器搭建之Apollo
    sudo apt-get update报错E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。
    struct.error: cannot convert argument to integer解决办法
    PHP MySQL 创建数据库和表 之 Create
    PHP MySQL 连接数据库 之 Connect
    飞行的架构师和奔跑的程序员
    hdu 5610 Baby Ming and Weight lifting
  • 原文地址:https://www.cnblogs.com/alter888/p/9082256.html
Copyright © 2020-2023  润新知