redis的学习(三)java操作redis

java 操作 reids

redis 服务的启动

java 操作 redis 之前,一定要把 redis 服务启动。在 redis 的目录下进入命令界面。输入 redis-server redis.windows.conf, 出现 redis 的标志说明 redis 服务启动成功。
有的会出现 Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 的错误,是因为安装时是自动启动的,redis 服务在电脑开机时已经启动了。这里建议把 redis 服务设置为手动启动,尽量用带配置的命令去启动。

然后进入 redis 客户端测试是否能够访问,并进行简单的测试。

测试访问成功 0

java 连接 redis

1. 添加 jedis 和连接池的依赖

2. 实现 redis 连接
实现类


public class RedisClient {
    private Jedis jedis;// 非切片客户端连接
    private JedisPool jedisPool;// 非切片连接池
    private ShardedJedis shardedJedis;// 切片客户端连接
    private ShardedJedisPool shardedJedisPool;// 切片连接池
<span class="hljs-keyword">public</span> <span class="hljs-title function_">RedisClient</span><span class="hljs-params">()</span> {
    initJedisPool();
    jedis = jedisPool.getResource();
    <span class="hljs-comment">//因为是没有集群就只初始化了非切片的连接</span>

// initShardedJedisPool();
// shardedJedis = shardedJedisPool.getResource();
}

<span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">initJedisPool</span><span class="hljs-params">()</span> {
    <span class="hljs-comment">//1.创建jedis连接池配置对象</span>
    <span class="hljs-type">JedisPoolConfig</span> <span class="hljs-variable">jedisPoolConfig</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisPoolConfig</span>();
    <span class="hljs-comment">//2.配置jedis</span>
    jedisPoolConfig.setMaxIdle(<span class="hljs-number">5</span>);
    jedisPoolConfig.setMaxTotal(<span class="hljs-number">20</span>);
    jedisPoolConfig.setMaxWaitMillis(<span class="hljs-number">1000</span>);
    jedisPoolConfig.setTestOnBorrow(<span class="hljs-literal">true</span>);<span class="hljs-comment">//测试连接是否畅通</span>
    <span class="hljs-comment">//3.创建jedis连接池</span>
    jedisPool = <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisPool</span>(jedisPoolConfig, <span class="hljs-string">"127.0.0.1"</span>, <span class="hljs-number">6379</span>, <span class="hljs-number">1000</span>, <span class="hljs-string">"12345"</span>);
}

<span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">initShardedJedisPool</span><span class="hljs-params">()</span> {
    <span class="hljs-type">JedisPoolConfig</span> <span class="hljs-variable">jedisPoolConfig</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisPoolConfig</span>();
    jedisPoolConfig.setMaxIdle(<span class="hljs-number">5</span>);
    jedisPoolConfig.setMaxTotal(<span class="hljs-number">20</span>);
    jedisPoolConfig.setMaxWaitMillis(<span class="hljs-number">1000</span>);
    jedisPoolConfig.setTestOnBorrow(<span class="hljs-literal">true</span>);

    <span class="hljs-comment">//配置多个shared</span>
    List&lt;JedisShardInfo&gt; sharedInfos = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span>&lt;JedisShardInfo&gt;();
    <span class="hljs-type">JedisShardInfo</span> <span class="hljs-variable">jedisShardInfo</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JedisShardInfo</span>(<span class="hljs-string">"127.0.0.1"</span>, <span class="hljs-number">6379</span>, <span class="hljs-number">1000</span>);
    jedisShardInfo.setPassword(<span class="hljs-string">"12345"</span>);
    sharedInfos.add(jedisShardInfo);


    shardedJedisPool = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ShardedJedisPool</span>(jedisPoolConfig,sharedInfos);
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">call</span><span class="hljs-params">()</span> {
    stringOperate();
    listOperate();
    setOperate();
    hashOperate();
    sortedSetOperate();

    jedisPool.returnResource(jedis);
    <span class="hljs-comment">//shardedJedisPool.returnBrokenResource(shardedJedis);</span>
}

<span class="hljs-comment">/**
 * string的基本操作
 * set添加、修改
 * get 获取
 * append 追加
 * del 删除
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">stringOperate</span><span class="hljs-params">()</span> {
    jedis.flushAll();
    System.out.println(<span class="hljs-string">"reids的string类型命令============================"</span>);
    jedis.set(<span class="hljs-string">"test1"</span>, <span class="hljs-string">"10"</span>);
    jedis.set(<span class="hljs-string">"test2"</span>, <span class="hljs-string">"20"</span>);
    System.out.println(<span class="hljs-string">"取出存储的string类型的值"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"test1"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"test2"</span>));
    System.out.println(<span class="hljs-string">"让两个key的自增"</span>);
    System.out.println(jedis.incr(<span class="hljs-string">"test1"</span>));
    System.out.println(jedis.incr(<span class="hljs-string">"test2"</span>));
    System.out.println(<span class="hljs-string">"setnx功能测试"</span>);
    System.out.println(<span class="hljs-string">"第一次设置,如果为1,设置成功,0失败;两次设置key相同返回值为"</span> + jedis.setnx(<span class="hljs-string">"test3"</span>, <span class="hljs-string">"suo"</span>));
    System.out.println(<span class="hljs-string">"第二次设置,如果为1,设置成功,0失败;返回值为"</span> + jedis.setnx(<span class="hljs-string">"test3"</span>, <span class="hljs-string">"suo"</span>));

}

<span class="hljs-comment">/**
 * list操作
 * lpush rpush设置列表值
 * lrange 获取list值
 * lrem 删除
 * lset 修改
 * &lt;p&gt;
 * sort排序
 * 数字,不用加sortrams,字母需要加,并且是ASCII排序
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">listOperate</span><span class="hljs-params">()</span> {
    jedis.flushAll();
    System.out.println(<span class="hljs-string">"redis对list类型操作============="</span>);
    jedis.lpush(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"value1"</span>, <span class="hljs-string">"value2"</span>, <span class="hljs-string">"value3"</span>);
    jedis.rpush(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"value4"</span>);
    System.out.println(<span class="hljs-string">"获取添加list的值"</span>);
    System.out.println(jedis.lrange(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));
    jedis.lset(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>, <span class="hljs-string">"test5"</span>);
    System.out.println(<span class="hljs-string">"查看修改过后索引位置的值:"</span> + jedis.lindex(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>));
    jedis.lrem(<span class="hljs-string">"key1"</span>, <span class="hljs-number">1</span>, <span class="hljs-string">"value1"</span>);
    System.out.println(<span class="hljs-string">"删除1个值为value1后的list:"</span> + jedis.lrange(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));

}

<span class="hljs-comment">/**
 * sadd 添加
 * srem 删除
 * smembers 查看所有成员
 * sinter 交集
 * sinterstore 交集保存到新的set
 * sunion 并集
 * sunionstore 并集保存到新的set
 * sdiff 差集
 * sdiffstore 差集保存到新的set
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setOperate</span><span class="hljs-params">()</span> {
    jedis.flushAll();
    System.out.println(<span class="hljs-string">"对set类型的操作========================="</span>);
    jedis.sadd(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"a1"</span>, <span class="hljs-string">"a2"</span>, <span class="hljs-string">"a3"</span>, <span class="hljs-string">"a4"</span>, <span class="hljs-string">"a5"</span>);
    jedis.sadd(<span class="hljs-string">"key2"</span>, <span class="hljs-string">"a1"</span>, <span class="hljs-string">"a3"</span>, <span class="hljs-string">"a5"</span>);
    jedis.sadd(<span class="hljs-string">"key3"</span>, <span class="hljs-string">"a2"</span>, <span class="hljs-string">"a4"</span>);
    System.out.println(<span class="hljs-string">"获取对应key的成员值key1"</span> + jedis.smembers(<span class="hljs-string">"key1"</span>) + <span class="hljs-string">" key2:"</span> + jedis.smembers(<span class="hljs-string">"key2"</span>) + <span class="hljs-string">" key3:"</span> + jedis.smembers(<span class="hljs-string">"key3"</span>));
    System.out.println(<span class="hljs-string">"key1和key3交集:"</span> + jedis.sinter(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"key3"</span>));
    jedis.sinterstore(<span class="hljs-string">"key4"</span>, <span class="hljs-string">"key1"</span>, <span class="hljs-string">"key3"</span>);
    System.out.println(<span class="hljs-string">"交集获得新的set key4:"</span> + jedis.smembers(<span class="hljs-string">"key4"</span>));
    System.out.println(<span class="hljs-string">"key2和key3并集:"</span> + jedis.sunion(<span class="hljs-string">"key2"</span>, <span class="hljs-string">"key3"</span>));
    jedis.sunionstore(<span class="hljs-string">"key5"</span>, <span class="hljs-string">"key2"</span>, <span class="hljs-string">"key3"</span>);
    System.out.println(<span class="hljs-string">"并集获得新的set key5:"</span> + jedis.smembers(<span class="hljs-string">"key5"</span>));
    System.out.println(<span class="hljs-string">"key1和key2差集:"</span> + jedis.sdiff(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"key2"</span>));
    jedis.sdiffstore(<span class="hljs-string">"key6"</span>, <span class="hljs-string">"key1"</span>, <span class="hljs-string">"key2"</span>);
    System.out.println(<span class="hljs-string">"差集获得新的set key6"</span> + jedis.smembers(<span class="hljs-string">"key6"</span>));
}

<span class="hljs-comment">/**
 * hset 设置或者修改
 * hgetAll 获取所有
 * hdel 删除
 * hincrby 自增
 * hkeys 查询key所有的成员
 * hvalues 查询key所有的成员的value
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">hashOperate</span><span class="hljs-params">()</span> {
    jedis.flushAll();
    System.out.println(<span class="hljs-string">"对hash类型的操作==========================="</span>);
    jedis.hset(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"field1"</span>, <span class="hljs-string">"10"</span>);
    HashMap&lt;String, String&gt; hashMap = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span>&lt;&gt;();
    hashMap.put(<span class="hljs-string">"field2"</span>, <span class="hljs-string">"20"</span>);
    hashMap.put(<span class="hljs-string">"field3"</span>, <span class="hljs-string">"30"</span>);
    hashMap.put(<span class="hljs-string">"field4"</span>, <span class="hljs-string">"22"</span>);
    jedis.hmset(<span class="hljs-string">"key1"</span>, hashMap);
    System.out.println(<span class="hljs-string">"获取key1所有的成员:"</span> + jedis.hgetAll(<span class="hljs-string">"key1"</span>));
    jedis.hincrBy(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"field1"</span>, <span class="hljs-number">5</span>);
    System.out.println(<span class="hljs-string">"为key1的指定成员field1增加5后的值:"</span> + jedis.hget(<span class="hljs-string">"key1"</span>, <span class="hljs-string">"field1"</span>));
    System.out.println(<span class="hljs-string">"获取key1的所有成员:"</span> + jedis.hkeys(<span class="hljs-string">"key1"</span>));
    System.out.println(<span class="hljs-string">"获取key1所有成员的value:"</span> + jedis.hvals(<span class="hljs-string">"key1"</span>));
}

<span class="hljs-comment">/**
 * zadd 添加
 * zcard 返回成员数
 * zcount 计算区间中的成员数
 * zrange 返回集合区间的成员 当start为0,stop为1时查看全部区间;
 * zrem 删除集合中成员
 * zremrangebyrank 删除集合中给定排名区间的成员
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">sortedSetOperate</span><span class="hljs-params">()</span> {
    jedis.flushAll();
    System.out.println(<span class="hljs-string">"对sortedset类型的操作"</span>);
    jedis.zadd(<span class="hljs-string">"key1"</span>, <span class="hljs-number">20</span>, <span class="hljs-string">"member1"</span>);
    jedis.zadd(<span class="hljs-string">"key1"</span>, <span class="hljs-number">30</span>, <span class="hljs-string">"member2"</span>);
    jedis.zadd(<span class="hljs-string">"key1"</span>, <span class="hljs-number">15</span>, <span class="hljs-string">"member3"</span>);
    System.out.println(<span class="hljs-string">"获取集合区间的所有成员和分数"</span> + jedis.zrangeWithScores(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));
    System.out.println(<span class="hljs-string">"获取成员数"</span> + jedis.zcard(<span class="hljs-string">"key1"</span>));
    System.out.println(<span class="hljs-string">"获取20-30区间的成员数"</span> + jedis.zcount(<span class="hljs-string">"key1"</span>, <span class="hljs-number">20</span>, <span class="hljs-number">30</span>));
    jedis.zremrangeByRank(<span class="hljs-string">"key1"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
    System.out.println(jedis.zrangeWithScores(<span class="hljs-string">"key1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));

}

}

测试结果

  1. string 类型

  2. list 类型

  3. set 类型

  4. hash 类型

  5. sortedSet 类型