Java使用Redis

1. 下载 jedis.jar

2. 五个数据类型 String List Hash Set SortedSet 操作

public class RedisTest {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> InterruptedException {
    <span class="hljs-type">RedisTest</span> <span class="hljs-variable">redisTest</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">RedisTest</span>();
    redisTest.KeyTest();

}

public void StringTest(){
// 连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
// 查看服务是否运行
System.out.println("Server is running:"+jedis.ping());

    <span class="hljs-comment">//String</span>

    <span class="hljs-comment">//添加</span>
    jedis.set(<span class="hljs-string">"food"</span>,<span class="hljs-string">"fish"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
    <span class="hljs-comment">//修改</span>
    jedis.append(<span class="hljs-string">"food"</span>,<span class="hljs-string">"apple"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
    <span class="hljs-comment">//覆盖</span>
    jedis.set(<span class="hljs-string">"food"</span>,<span class="hljs-string">"fish2"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
    <span class="hljs-comment">//删除</span>
    jedis.del(<span class="hljs-string">"food"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"food"</span>));

    <span class="hljs-comment">//同时设置</span>
    jedis.mset(<span class="hljs-string">"name"</span>,<span class="hljs-string">"lwx"</span>,<span class="hljs-string">"age"</span>,<span class="hljs-string">"12"</span>);
    System.out.println(jedis.mget(<span class="hljs-string">"name"</span>,<span class="hljs-string">"age"</span>));

}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">MapTest</span><span class="hljs-params">()</span>{
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
    System.out.println(<span class="hljs-string">"Server is running: "</span>+jedis.ping());
    <span class="hljs-comment">//单条</span>
    jedis.hset(<span class="hljs-string">"hash"</span>,<span class="hljs-string">"key"</span>,<span class="hljs-string">"v"</span>);
    jedis.hget(<span class="hljs-string">"hash"</span>,<span class="hljs-string">"key"</span>);

    <span class="hljs-comment">//多条</span>
    Map&lt;String,String&gt; map = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span>&lt;&gt;();
    map.put(<span class="hljs-string">"name"</span>, <span class="hljs-string">"lwx"</span>);
    map.put(<span class="hljs-string">"age"</span>,<span class="hljs-string">"12"</span>);
    jedis.hmset(<span class="hljs-string">"map"</span>,map);
    System.out.println(jedis.hmget(<span class="hljs-string">"map"</span>,<span class="hljs-string">"name"</span>));<span class="hljs-comment">//返回List</span>

    <span class="hljs-comment">//获取hash所有数据</span>
    System.out.println(jedis.hgetAll(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map类型</span>

    <span class="hljs-comment">//其他</span>
    System.out.println(jedis.hlen(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//map键的个数</span>
    System.out.println(jedis.exists(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//是否存在key为map的记录</span>
    System.out.println(jedis.hkeys(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map对象中的所有key</span>
    System.out.println(jedis.hvals(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map对象中的所有value</span>

    <span class="hljs-comment">//遍历</span>
    Iterator&lt;String&gt; iter=jedis.hkeys(<span class="hljs-string">"map"</span>).iterator();
    <span class="hljs-keyword">while</span> (iter.hasNext()){
        <span class="hljs-type">String</span> <span class="hljs-variable">key</span> <span class="hljs-operator">=</span> iter.next();
        System.out.println(key+<span class="hljs-string">":"</span>+jedis.hmget(<span class="hljs-string">"map"</span>,key));
    }

    <span class="hljs-comment">//删除</span>
    jedis.hdel(<span class="hljs-string">"map"</span>,<span class="hljs-string">"name"</span>);
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">ListTest</span><span class="hljs-params">()</span> {
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);

    <span class="hljs-comment">//添加(添加到头部)</span>
    jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Redis"</span>);
    jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Mongodb"</span>);
    jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Mysql"</span>);

    <span class="hljs-comment">//添加(尾部)</span>
    jedis.rpush(<span class="hljs-string">"list"</span>,<span class="hljs-string">"right"</span>);

    <span class="hljs-comment">// 获取存储的数据并输出</span>
    List&lt;String&gt; list = jedis.lrange(<span class="hljs-string">"list"</span>, <span class="hljs-number">0</span>, <span class="hljs-number">5</span>);
    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i &lt; list.size(); i++) {
        System.out.println(<span class="hljs-string">"Stored string in redis:: "</span> + list.get(i));
    }

    System.out.println(jedis.llen(<span class="hljs-string">"list"</span>));<span class="hljs-comment">//长度</span>

    <span class="hljs-comment">//左弹出</span>
    jedis.lpop(<span class="hljs-string">"list"</span>);
    <span class="hljs-comment">//右弹出</span>
    jedis.rpop(<span class="hljs-string">"list"</span>);

    <span class="hljs-comment">//删除 (key,个数,值)</span>
    jedis.lrem(<span class="hljs-string">"list"</span>,<span class="hljs-number">1</span>,<span class="hljs-string">"Mysql"</span>);
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SetTest</span><span class="hljs-params">()</span>{
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
    <span class="hljs-comment">//添加</span>
    jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"meepo"</span>);
    jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"dota"</span>);
    jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"poofu"</span>);
    jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"noname"</span>);

    <span class="hljs-comment">//移除</span>
    jedis.srem(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"noname"</span>);
    <span class="hljs-comment">//获取所有加入的member</span>
    System.out.println(jedis.smembers(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回set</span>
    System.out.println(jedis.sismember(<span class="hljs-string">"sname"</span>, <span class="hljs-string">"meepo"</span>));<span class="hljs-comment">//判断 member 是否是集合的元素</span>
    System.out.println(jedis.srandmember(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回随机一个member</span>
    System.out.println(jedis.scard(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回集合的元素个数</span>
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SortedSetTest</span><span class="hljs-params">()</span>{
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span><span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);

    Map&lt;String ,Double&gt; map = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span>&lt;&gt;();
    map.put(<span class="hljs-string">"a"</span>,<span class="hljs-number">60D</span>);
    map.put(<span class="hljs-string">"b"</span>,<span class="hljs-number">70D</span>);

    jedis.zadd(<span class="hljs-string">"score"</span>,map);
    Set&lt;String&gt; set = jedis.zrange(<span class="hljs-string">"score"</span>,<span class="hljs-number">0</span>,<span class="hljs-number">2</span>);
    System.out.println(set);
    <span class="hljs-comment">//长度</span>
    System.out.println(jedis.zcard(<span class="hljs-string">"score"</span>));
    <span class="hljs-comment">//删除</span>
    jedis.zrem(<span class="hljs-string">"score"</span>,<span class="hljs-string">"a"</span>,<span class="hljs-string">"b"</span>);


}

}

3. 键操作和失效时间

 /**
     * key 操作
     * @throws InterruptedException
     */
    public void KeyTest() {
        Jedis jedis = new Jedis("localhost");
        //key 数量
        System.out.println(jedis.dbSize());
        // 返回当前库中所有的 key 正则表达式
        System.out.println(jedis.keys("*"));
    <span class="hljs-comment">//删除key为sanmdde的对象  删除成功返回1 删除失败(或者不存在)返回 0</span>
    System.out.println(jedis.del(<span class="hljs-string">"sanmdde"</span>));

    <span class="hljs-comment">//jedis 排序</span>
    <span class="hljs-comment">//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)</span>
    jedis.del(<span class="hljs-string">"a"</span>);<span class="hljs-comment">//先清除数据,再加入数据进行测试</span>
    jedis.rpush(<span class="hljs-string">"a"</span>, <span class="hljs-string">"1"</span>);
    jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"6"</span>);
    jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"3"</span>);
    jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"9"</span>);
    System.out.println(jedis.lrange(<span class="hljs-string">"a"</span>,<span class="hljs-number">0</span>,-<span class="hljs-number">1</span>));<span class="hljs-comment">// [9, 3, 6, 1]</span>
    System.out.println(jedis.sort(<span class="hljs-string">"a"</span>)); <span class="hljs-comment">//[1, 3, 6, 9]  //输入排序后结果</span>
    System.out.println(jedis.lrange(<span class="hljs-string">"a"</span>,<span class="hljs-number">0</span>,-<span class="hljs-number">1</span>));
}

<span class="hljs-comment">//    层级目录</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">DirTest</span><span class="hljs-params">()</span>{
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
    jedis.set(<span class="hljs-string">"login:user0:item0"</span>,<span class="hljs-string">"apple"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"login:user0:item0"</span>));
}

<span class="hljs-comment">/**
 * key失效时间
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">ExpireTest</span><span class="hljs-params">()</span>{
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
    jedis.set(<span class="hljs-string">"code"</span>,<span class="hljs-string">"test"</span>);
    <span class="hljs-comment">//设置失效时间 秒</span>
    jedis.expire(<span class="hljs-string">"code"</span>,<span class="hljs-number">10</span>);
    <span class="hljs-comment">//设置失效时间 毫秒</span>
    jedis.pexpire(<span class="hljs-string">"code"</span>,<span class="hljs-number">10000</span>);
    <span class="hljs-comment">//指定key的存活(有效时间) 时间为秒</span>
    jedis.setex(<span class="hljs-string">"code"</span>, <span class="hljs-number">10</span>, <span class="hljs-string">"test"</span>);
    <span class="hljs-comment">//毫秒</span>
    jedis.psetex(<span class="hljs-string">"code"</span>, <span class="hljs-number">1000</span>, <span class="hljs-string">"test"</span>);
    <span class="hljs-comment">//返回给定key的有效时间,如果是-1则表示永远有效 -2已失效</span>
    System.out.println(jedis.ttl(<span class="hljs-string">"code"</span>));
    System.out.println(jedis.pttl(<span class="hljs-string">"code"</span>));<span class="hljs-comment">//毫秒</span>

    <span class="hljs-type">SetParams</span> <span class="hljs-variable">setParams</span> <span class="hljs-operator">=</span> SetParams.setParams();

    <span class="hljs-comment">//不存在才能成功</span>
    setParams.nx();
    <span class="hljs-comment">//存在才能成功</span>
    setParams.xx();
    <span class="hljs-comment">//秒</span>
    setParams.ex(<span class="hljs-number">5</span>);
    <span class="hljs-comment">//毫秒</span>
    setParams.px(<span class="hljs-number">20000</span>);
    jedis.set(<span class="hljs-string">"code"</span>,<span class="hljs-string">"test"</span>,setParams);

}

层级目录

4. 事务操作

使用 set 指定 key 和 value 后,执行提交事务会存储数据库中,回滚后则 set 无效

/**
     * 事务
     */
    public void transactionTest(){
        Jedis jedis = new Jedis("localhost");
        // 开启事务
        Transaction transaction = jedis.multi();
        transaction.set("tran2","test");
        // 提交事务
       // transaction.exec();
        // 事务回滚
        transaction.discard();
    }

5.bity 数组操作

/**
     * bite 数组
     */
    public void BytesTest(){
        User user = new User();
        user.setId(2);
        user.setUsername("lwx");
        user.setPassword("123456");
    <span class="hljs-type">byte</span>[] userKey = SerializeUtil.serialize(<span class="hljs-string">"user:"</span> + user.getId());
    <span class="hljs-type">byte</span>[] userValue = SerializeUtil.serialize(user);

    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>();
    jedis.set(userKey,userValue);
    <span class="hljs-type">byte</span>[] bytes = jedis.get(userKey);

    <span class="hljs-type">User</span> <span class="hljs-variable">u</span> <span class="hljs-operator">=</span> (User) SerializeUtil.unserialize(bytes);
    System.out.println(u.getUsername());
}

序列化工具类


public class SerializeUtil {
<span class="hljs-comment">/**
 * java对象转化为byte数组
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-type">byte</span>[] serialize(Object object){
    <span class="hljs-type">ObjectOutputStream</span> <span class="hljs-variable">oos</span> <span class="hljs-operator">=</span><span class="hljs-literal">null</span>;
    <span class="hljs-type">ByteArrayOutputStream</span> <span class="hljs-variable">baos</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">try</span>{
        baos = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ByteArrayOutputStream</span>();
        oos = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ObjectOutputStream</span>(baos);
        oos.writeObject(object);
        <span class="hljs-type">byte</span>[] bytes = baos.toByteArray();
        <span class="hljs-keyword">return</span> bytes;
    }<span class="hljs-keyword">catch</span> (Exception e){
        e.printStackTrace();
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}

<span class="hljs-comment">/**
 * byte数组转化为java对象
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Object <span class="hljs-title function_">unserialize</span><span class="hljs-params">(<span class="hljs-type">byte</span>[] bytes)</span>{
    <span class="hljs-keyword">if</span>(bytes == <span class="hljs-literal">null</span>){
        <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
    }
    <span class="hljs-type">ByteArrayInputStream</span> <span class="hljs-variable">bais</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">try</span>{
        bais = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ByteArrayInputStream</span>(bytes);
        <span class="hljs-type">ObjectInputStream</span> <span class="hljs-variable">ois</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">ObjectInputStream</span>(bais);
        <span class="hljs-keyword">return</span> ois.readObject();
    }<span class="hljs-keyword">catch</span> (Exception e){
        e.printStackTrace();
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}

}