`

redis学习笔记-java操作String类型

阅读更多

package com.naxsu.redis;

import static org.junit.Assert.*;

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

import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;

/**
 * 对String类型进行操作
 * 为了僻免上面的测试的结果影响到当前测试方法,测试之前先把数据库给清空
 */
public class StringValuesCommandsTest{
	Jedis jedis = null;
	
	@Before
	public void before(){
		jedis = new Jedis("192.168.26.128");
		jedis.auth("123456");
		
		jedis.flushDB();
	}
	
	@Test
	public void flushDB() {
		jedis.flushDB();// 清空redis
	}
	
    @Test
    public void setAndGet() {
    	//对key为foo进行赋值
        String status = jedis.set("foo", "bar");
        //返回OK
        assertEquals("OK", status);
        //获取key为foo的值
        String value = jedis.get("foo");
        //取出的值为bar,所以相等
        assertEquals("bar", value);
        //由于不存在名为bar的key,所以取出来的值为null
        assertEquals(null, jedis.get("bar"));
    }

    @Test
    public void getSet() {
    	//将foo的值设为bar,并返回foo的旧值
        String value = jedis.getSet("foo", "bar");
        //旧值为null
        assertEquals(null, value);
        value = jedis.get("foo");
        assertEquals("bar", value);
    }

    @Test
    public void mget() {
    	//mget:返回所有(一个或多个)给定key的值
        List<String> values = jedis.mget("foo", "bar");
        List<String> expected = new ArrayList<String>();
        expected.add(null);
        expected.add(null);

        assertEquals(expected, values);

        jedis.set("foo", "bar");

        expected = new ArrayList<String>();
        expected.add("bar");
        expected.add(null);
        values = jedis.mget("foo", "bar");

        assertEquals(expected, values);

        jedis.set("bar", "foo");

        expected = new ArrayList<String>();
        expected.add("bar");
        expected.add("foo");
        values = jedis.mget("foo", "bar");

        assertEquals(expected, values);
    }

    @Test
    public void setnx() {
    	//setnx:将key的值设为value,当且仅当key不存在
        long status = jedis.setnx("foo", "bar");
        assertEquals(1, status);
        assertEquals("bar", jedis.get("foo"));

        status = jedis.setnx("foo", "bar2");
        assertEquals(0, status);
        assertEquals("bar", jedis.get("foo"));
    }

    @Test
    public void setex() {
    	//给foo设置生存时间设为20秒,值为bar
        String status = jedis.setex("foo", 20, "bar");
        assertEquals("OK", status);
        //返回foo的剩余生存时间
        long ttl = jedis.ttl("foo");
        assertTrue(ttl > 0 && ttl <= 20);
    }

    @Test
    public void mset() {
    	//mset:同时设置一个或多个key-value对
        String status = jedis.mset("foo", "bar", "bar", "foo");
        assertEquals("OK", status);
        assertEquals("bar", jedis.get("foo"));
        assertEquals("foo", jedis.get("bar"));
    }

    @Test
    public void msetnx() {
    	//msetnx:同时设置一个或多个key-value对,当且仅当key不存在
        long status = jedis.msetnx("foo", "bar", "bar", "foo");
        assertEquals(1, status);
        assertEquals("bar", jedis.get("foo"));
        assertEquals("foo", jedis.get("bar"));

        status = jedis.msetnx("foo", "bar1", "bar2", "foo2");
        assertEquals(0, status);
        assertEquals("bar", jedis.get("foo"));
        assertEquals("foo", jedis.get("bar"));
    }

    @Test(expected = JedisDataException.class)
    public void incrWrongValue() {
        jedis.set("foo", "bar");
        //foo的值是字符串类型,执行incr函数即抛出异常
        jedis.incr("foo");
    }

    @Test
    public void incr() {
    	//如果foo不存在,以0为foo的初始值,然后执行INCR操作
        long value = jedis.incr("foo");
        assertEquals(1, value);
        value = jedis.incr("foo");
        assertEquals(2, value);
    }

    @Test(expected = JedisDataException.class)
    public void incrByWrongValue() {
        jedis.set("foo", "bar");
        //foo的值是字符串,给他增加2净抛出异常
        jedis.incrBy("foo", 2);
    }

    @Test
    public void incrBy() {
    	//如果foo不存在,以0为foo的初始值,然后执行INCRBY命令,增加2。
        long value = jedis.incrBy("foo", 2);
        assertEquals(2, value);
        value = jedis.incrBy("foo", 2);
        assertEquals(4, value);
    }

    @Test(expected = JedisDataException.class)
    public void decrWrongValue() {
        jedis.set("foo", "bar");
        //foo的值为字符串,不能操作减一
        jedis.decr("foo");
    }

    @Test
    public void decr() {
    	//如果foo不存在,以0为foo的初始值,然后执行DECR操作。
        long value = jedis.decr("foo");
        assertEquals(-1, value);
        value = jedis.decr("foo");
        assertEquals(-2, value);
    }

    @Test(expected = JedisDataException.class)
    public void decrByWrongValue() {
        jedis.set("foo", "bar");
        //foo的值为字符串,不能操作减2
        jedis.decrBy("foo", 2);
    }

    @Test
    public void decrBy() {
        long value = jedis.decrBy("foo", 2);
        assertEquals(-2, value);
        value = jedis.decrBy("foo", 2);
        assertEquals(-4, value);
    }

    @Test
    public void append() {
    	//foo不存在,给foor的值设为bar,返回append后的值长度
        long value = jedis.append("foo", "bar");
        assertEquals(3, value);
        assertEquals("bar", jedis.get("foo"));
        //再次append,在之前的值之后
        value = jedis.append("foo", "bar");
        assertEquals(6, value);
        assertEquals("barbar", jedis.get("foo"));
    }

    @Test
    public void substr() {
        jedis.set("s", "This is a string");
        //截字符串操作,没什么好说的
        assertEquals("This", jedis.substr("s", 0, 3));
        assertEquals("ing", jedis.substr("s", -3, -1));
        assertEquals("This is a string", jedis.substr("s", 0, -1));
        assertEquals(" string", jedis.substr("s", 9, 100000));
    }

    @Test
    public void strlen() {
        jedis.set("s", "This is a string");
        assertEquals("This is a string".length(), jedis.strlen("s").intValue());
    }

    @Test
    public void incrLargeNumbers() {
        long value = jedis.incr("foo");
        assertEquals(1, value);
        assertEquals(1L + Integer.MAX_VALUE, (long) jedis.incrBy("foo",
                Integer.MAX_VALUE));
    }

    @Test(expected = JedisDataException.class)
    public void incrReallyLargeNumbers() {
        jedis.set("foo", Long.toString(Long.MAX_VALUE));
        long value = jedis.incr("foo");
        assertEquals(Long.MIN_VALUE, value);
    }
} 
 源码包迟点发布
分享到:
评论

相关推荐

    Redis学习笔记.pdf

    在Java操作方面,可以利用jedis库来进行各种数据类型的操作,同时也可以与SpringBoot框架进行整合。 Redis还支持主从复制和哨兵机制(Sentinel),前者可以实现数据的同步备份,后者则用于管理多个Redis服务器,...

    Redis学习笔记整理

    ### Redis学习笔记整理 #### 一、Redis环境搭建 ##### 1.1 简介 Redis是一款开源的键值(Key-Value)型数据库系统,因其高性能和丰富的数据结构而广受欢迎。它不仅可以作为数据库使用,还可以作为一种数据结构服务器...

    redis学习笔记,redis详解,Java源码.zip

    本学习笔记将深入探讨Redis的核心概念、功能特性以及如何在Java环境中进行操作。 一、Redis概述 Redis全称Remote Dictionary Server,由意大利程序员Antonio Bertolli开发,它是一个开源的、基于键值对的数据存储...

    redis学习笔记(详细总结)

    它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希)。在此基础上,Redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。Redis ...

    Redis学习笔记大全

    Redis学习笔记大全 Redis是当前使用最广泛的NoSQL数据库之一,具有高性能、低延迟和支持事务等特点。本文将对Redis的基本概念、安装、启动、关闭、基本命令、5大数据类型、发布和订阅、Bitmaps和HyperLoglog等进行...

    redis详细笔记

    ### Redis详细笔记 #### 1. Redis介绍 Redis是一种高性能的键值对存储数据库,它使用C语言编写,能够提供非常高的读写速度。作为NoSQL数据库的一种,Redis旨在解决传统关系型数据库面临的高并发、高可扩展性、高...

    狂神说Redis笔记.pdf

    狂神的Redis笔记不仅仅是一个学习资料,更是一个快速掌握Redis的宝典。无论是初学者还是有经验的开发者,都能从中获得实用的信息。这些内容的整理,充分展示了狂神对于Redis的深刻理解和实践经验。通过这些知识点的...

    redis学习笔记

    ### Redis学习笔记知识点详解 #### 一、Redis环境搭建 **1.1 Redis简介** Redis是一种高性能的键值存储系统,常被用作数据库、缓存以及消息中间件。其最大的特点是支持多种数据结构,如字符串(String)、列表...

    狂神说redis笔记

    在《狂神说Redis笔记》中,我们可以了解到Redis的各个方面,包括其入门基础、高级特性、配置详解、持久化机制、事务操作、订阅发布机制、主从复制、安装指南、哨兵模式以及与Java的集成等。同时,笔记还探讨了为什么...

    Redis String 类型和 Hash 类型学习笔记与总结

    在本篇学习笔记中,我们将深入探讨这两种类型,了解它们的功能、操作方法以及如何在实际应用中有效利用。 首先,让我们来看一下 Redis String 类型。String 类型是最基础的类型,它允许我们存储简单的键值对,其中...

    我的Redis学习笔记,加案例实战。-MyRedis.zip

    - **字符串(String)**:最基础的类型,可以存储字符串、数字等。 - **哈希(Hash)**:用于存储键值对集合,适合存储对象。 - **列表(List)**:双向链表,支持头尾插入和删除,适用于实现消息队列。 - **集合(Set)...

    Redis的学习笔记

    Redis 是一款开源的 NoSQL 数据库,以键值对存储数据,同时也被称作数据结构服务器,因为它提供了丰富的数据类型,如字符串、列表、集合、有序集合和哈希表等。Redis 支持多种原子性操作,如字符串的追加、数值的...

    一份精简的redis入门学习笔记

    Redis 是一款高性能的键值数据库,...在学习 Redis 时,了解其数据类型、操作命令、持久化机制以及复制和发布订阅等功能是至关重要的。通过不断实践和探索,可以深入掌握 Redis 的精髓,并将其有效地应用到实际项目中。

    Redis笔记以及资料

    - Jedis是Java语言中常用的Redis客户端,提供了丰富的API供开发者操作Redis。 - 使用Jedis进行连接池管理,可以提高并发性能。 **9. Redis Cluster** - Redis Cluster是官方提供的分布式解决方案,通过数据分片...

    redis实战中文版

    #### 五、Redis数据类型及操作 ##### 2.2 Strings类型及操作 - **基础操作**: `set`、`get`。 - **其他操作**: `setnx`、`setex`、`setrange`、`mset`、`mget`等。 ##### 2.3 Hashes类型及操作 - **操作**: `hset`...

    《深入理解Spring Cloud与微服务构建》学习笔记(六)-整合redis实践

    在本篇《深入理解Spring Cloud与微服务构建》的学习笔记中,我们将重点探讨如何将Redis这一流行的内存数据存储系统整合到Spring Cloud微服务架构中。Redis不仅被广泛用于缓存,还支持多种数据结构,如字符串、哈希、...

    redis笔记.zip

    在学习Redis时,除了阅读文档和笔记,还可以参考官方文档、社区论坛、在线课程等资源,加深理解和掌握实际操作技能。同时,实践是检验理论的最好方式,可以通过搭建Redis环境,动手操作,解决实际问题来提升技能水平...

    redis相关资料,代码、学习文档、笔记

    总的来说,这个压缩包提供了从理论到实践的全面Redis学习资源,无论你是初学者还是有一定经验的开发者,都可以从中受益。通过学习和研究这些材料,你将能够更熟练地掌握Redis的使用,提升你的开发技能。

Global site tag (gtag.js) - Google Analytics