Redis Java客户端-Jedis测试

in Java with 0 comment

Redis配置

先来继续上篇Redis单机版集群中配置的未完部分。

取消IP绑定

我们可以取消对IP的绑定,使所有ip均可访问,在redis.conf配置文件里取消对IP的绑定,如图:

bind_localhost

关闭保护模式

在redis.conf配置文件里,将protected-mode的参数设为no

protected-mode-close

查看密码设置

redis客户端登录后用config get requirepass命令查看密码:

config_get_requirepass

密码设置授权登录
config set requirepass "密码"
auth 密码
性能测试

同时执行 10000 个请求来检测性能

./redis-benchmark -n 10000

redis-benchmark

主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数

./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q

redis-benchmark_setlpush

启动时添加最大连接数参数

--maxclients 1000

client-maxclients

互通主机和虚拟机

redis是安装在virtualBox虚拟机里面的,发现是无法互通的。查看虚拟机IP:

virtual_ip

VirtualBox,安装的默认方式是NAT(网络地址转换协议),但是这种方式在virtualbox虚拟机下有个缺点,就是虚拟机可以ping通主机,虚拟机也可以通过主机访问外网,但是主机ping不通虚拟机。

设置虚拟机网络连接方式为主机模式

host_only

设置主机虚拟网络适配器为同一个网段

vb_host_only_network

主机ping通虚拟机

master_ping_slave

虚拟机ping通主机

slave_ping_master

Jedis客户端

创建Maven Project,添加依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
 <dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.9.0</version>
 </dependency>

编写JUnit测试案例

/**
 * 名称:类的中文名称 <br>
 * 功能:对类的功能进行说明 <br/>
 * <br/>
 * 
 * @since JDK 1.7
 * @see
 * @author wenqy
 */
public class JedisTest extends TestCase {
    Jedis jedis = null;
    /*
     * (non-Javadoc)
     * 
     * @see junit.framework.TestCase#setUp()
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        jedis = new Jedis(“192.168.56.101”, 6379);
    }
    /**
     * redis存储字符串
     */
    public void testString() {
        // —–添加数据———-
        jedis.set(“name”, “wenqy”);// 向key–>name中放入了value–>wenqy
        System.out.println(jedis.get(“name”));// 执行结果:wenqy
        jedis.append(“name”, ” is my name”); // 拼接
        System.out.println(jedis.get(“name”));
        jedis.del(“name”); // 删除某个键
        System.out.println(jedis.get(“name”));
        // 设置多个键值对
        jedis.mset(“name”, “wenqy”, “age”, “25”, “qq”, “106160XXXX”);
        jedis.incr(“age”); // 进行加1操作
        System.out.println(jedis.get(“name”) + “-“ + jedis.get(“age”) + “-“ + jedis.get(“qq”));
    }
    /**
     * redis操作hash
     */
    public void testhash() {
        // —–添加数据———-
        Map<String, String> map = new HashMap<String, String>();
        map.put(“name”, “wenqy”);
        map.put(“age”, “25”);
        map.put(“qq”, “106160XXXX”);
        jedis.del(“user”);
        jedis.hmset(“user”, map);// key use
        // 取出user中的name,执行结果:[minxr]–>注意结果是一个泛型的List
        // 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
        List<String> rsmap = jedis.hmget(“user”, “name”, “age”, “qq”);
        System.out.println(rsmap);
        // 删除map中的某个键值
        jedis.hdel(“user”, “age”);
        System.out.println(jedis.hget(“user”, “age”)); // 因为删除了,所以返回的是null
        System.out.println(jedis.hlen(“user”)); // 返回key为user的键中存放的值的个数2
        System.out.println(jedis.exists(“user”));// 是否存在key为user的记录 返回true
        System.out.println(jedis.hkeys(“user”));// 返回map对象中的所有key
        System.out.println(jedis.hvals(“user”));// 返回map对象中的所有value
        Iterator<String> iter = jedis.hkeys(“user”).iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + “:” + jedis.hget(“user”, key));
        }
    }
    /**
     * jedis操作List
     */
    public void testList() {
        // 开始前,先移除所有的内容
        jedis.del(“java framework”); // key :java framework
        System.out.println(jedis.lrange(“java framework”, 0, –1)); // lrange start和end范围内元素的列表
        // 先向key java framework中存放三条数据
        jedis.lpush(“java framework”, “spring”); // 从左边插入
        jedis.lpush(“java framework”, “struts”);
        jedis.lpush(“java framework”, “hibernate”);
        // 再取出所有数据jedis.lrange是按范围取出,
        // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
        System.out.println(jedis.lrange(“java framework”, 0, –1));
        // 从链表弹出一个元素
        jedis.lpop(“java framework”);
        System.out.println(jedis.lrange(“java framework”, 0, –1));
        jedis.del(“java framework”);
        jedis.rpush(“java framework”, “spring”);
        jedis.rpush(“java framework”, “struts”);
        jedis.rpush(“java framework”, “hibernate”);
        System.out.println(jedis.lrange(“java framework”, 0, –1));
        jedis.rpop(“java framework”);
        System.out.println(jedis.lrange(“java framework”, 0, –1));
    }
    /**
     * jedis操作Set
     */
    public void testSet() {
        jedis.del(“user”);
        // 添加
        jedis.sadd(“user”, “wenqy1”);
        jedis.sadd(“user”, “wenqy2”);
        jedis.sadd(“user”, “wenqy3”);
        jedis.sadd(“user”, “wenqy4”);
        jedis.sadd(“user”, “who”);
        System.out.println(jedis.smembers(“user”));// 获取所有加入的value
        // 移除who
        jedis.srem(“user”, “who”);
        System.out.println(jedis.smembers(“user”));// 获取所有加入的value
        System.out.println(jedis.sismember(“user”, “who”));// 判断 who 是否是user集合的元素
        System.out.println(jedis.srandmember(“user”)); // 随机返回一个成员
        System.out.println(jedis.scard(“user”));// 返回集合的元素个数
    }
    /**
     * jedis操作Sorted-Sets
     */
    public void testSortedSet() {
        // 增加
        jedis.zadd(“mostUsedLanguages”, 100, “Java”);// ZADD
        // We could add more than one value in one calling
        Map<String, Double> scoreMembers = new HashMap<String, Double>();
        scoreMembers.put(“Python”, 90d);
        scoreMembers.put(“Javascript”, 80d);
        jedis.zadd(“mostUsedLanguages”, scoreMembers);
        // We could get the score for a member 得到对应的数据
        System.out.println(“Number of Java users:” + jedis.zscore(“mostUsedLanguages”, “Java”));
        // We could get the number of elements on the set //得到成员数量
        System.out.println(“Number of elements:” + jedis.zcard(“mostUsedLanguages”));// ZCARD
        // 得到给定范围的成员变量
        // get all the elements sorted from bottom to top
        System.out.println(jedis.zrange(“mostUsedLanguages”, 0, –1));
        // get all the elements sorted from top to bottom
        System.out.println(jedis.zrevrange(“mostUsedLanguages”, 0, –1));
    }
}

测试结果

wenqy
wenqy is my name
null
wenqy-26-106160XXXX
[wenqy, 25, 106160XXXX]
null
2
true
[qq, name]
[106160XXXX, wenqy]
qq:106160XXXX
name:wenqy
[]
[hibernate, struts, spring]
[struts, spring]
[spring, struts, hibernate]
[spring, struts]
[wenqy2, wenqy3, wenqy4, wenqy1, who]
[wenqy3, wenqy4, wenqy1, wenqy2]
false
wenqy1
4
Number of Java users:100.0
Number of elements:3
[Javascript, Python, Java]
[Java, Python, Javascript]

参考

http://www.redis.net.cn/tutorial/3501.html