redis-java基本使用

一、用户eclipse实现java代码和Redis的基本操作

</br>

1、jar包

</br>

2、代码实现

  • 基本代码:Redis/src/com/redis/RedisClient.java

package com.redis;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.jedis.SortingParams;

public class RedisClient {

    private Jedis jedis;   //非切片客户端连接
    private JedisPool jedisPool;  //非切片连接池
    private ShardedJedis shardedJedis;  //切片客户端连接
    private ShardedJedisPool shardedJedisPool;  //切片连接池
    
    public RedisClient() {
        initialPool(); 
        initialShardedPool(); 
        shardedJedis = shardedJedisPool.getResource(); 
        jedis = jedisPool.getResource();
    }
    
    /*
     * 初始化非切片池
     */
    
    private void initialPool(){
        
        //池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000L);
        config.setTestOnBorrow(false);
        
        jedisPool = new JedisPool(config,"127.0.0.1",6379);
    }
    
    /*
     * 初始化切片池
     */
    private void initialShardedPool(){
        
        //池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000L);
        config.setTestOnBorrow(false);
        
        //slave连接
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo("127.0.0.1", 6379, "master"));
        
        //构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
        
    }
    
    public void show(){
        KeyOperate();
        StringOperate();
        ListOperate();
        SetOperate();
        SortedSetOperate();
        HashOperate();
    }
    
    //功能代码模块
    
    /*
     * key功能
     */
     private void KeyOperate() {
         System.out.println();
        System.out.println("Key 功能 : ");
        
        //清空库中所有数据
        System.out.println("清空库中所有数据: "+jedis.flushDB());
        
        //新增 key001,value001键值对
        System.out.println("新增 key001,value001键值对: "+shardedJedis.set("key001", "value001"));
        System.out.println("新增 key002,value002键值对: "+shardedJedis.set("key002", "value002"));
        
        //判断key001是否存在
        System.out.println("判断key001是否存在: "+shardedJedis.exists("key001"));
        
        //输出系统中所有的key
        System.out.println("输出系统中所有的key:");
        Set<String> keys = jedis.keys("*");
        Iterator<String> iterator = keys.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key);
        }
            //结果为key001 key002
        
        //删除某个key,若key不存在这忽略命令
        System.out.println("删除某个key,若key不存在这忽略命令: "+jedis.del("key002"));;
        System.out.println("判断key002是否存在: "+jedis.exists("key002"));  //判断key002是否存在
        
        //设置key001的过期时间
        System.out.println("设置key001的过期时间: "+jedis.expire("key001", 5));
        
        try {
            Thread.sleep(2000); //睡眠2秒
        } catch (Exception e) {
            
        }

        //返回某个key的剩余有效时间,单位为”秒“,不存在的或者永远有效的都返回-1
        System.out.println("返回某个key001的剩余有效时间: "+jedis.ttl("key001"));
        
        //设置某个key的生存时间
        System.out.println("设置某个key001的生存时间: "+jedis.persist("key001"));
        
        //查看key所存放值的类型
        System.out.println(""+jedis.type("key001"));
        
        //修改key的名称
        System.out.println("重命名key001: "+jedis.rename("key001", "key01"));
        
        //将当前db中的key移动到指定的db当中
        System.out.println("将当前db中的key移动到指定的db当中: "+jedis.move("key01", 3));
        
        /*
         * 运行结果
         * 
              清空库中所有数据:OK
        判断key999键是否存在:false
        新增key001,value001键值对:OK
        判断key001是否存在:true
        新增key002,value002键值对:OK
        系统中所有键如下:
        key002
        key001
        系统中删除key002: 1
        判断key002是否存在:false
        设置 key001的过期时间为5秒:1
        查看key001的剩余生存时间:3
        移除key001的生存时间:1
        查看key001的剩余生存时间:-1
        查看key所储存的值的类型:string
        *
        */
     }

     private void StringOperate() {
         System.out.println();
         System.out.println("String 功能 :");
         // 清空数据 
         System.out.println("清空库中所有数据:"+jedis.flushDB());
         
         System.out.println("=============增=============");
         jedis.set("key001","value001");
         jedis.set("key002","value002");
         jedis.set("key003","value003");
         System.out.println("已新增的3个键值对如下:");
         System.out.println(jedis.get("key001"));
         System.out.println(jedis.get("key002"));
         System.out.println(jedis.get("key003"));
         
         System.out.println("=============删=============");  
         System.out.println("删除key003键值对:"+jedis.del("key003"));  
         System.out.println("获取key003键对应的值:"+jedis.get("key003"));
         
         System.out.println("=============改=============");
         //1、直接覆盖原来的数据
         System.out.println("直接覆盖key001原来的数据:"+jedis.set("key001","value001-update"));
         System.out.println("获取key001对应的新值:"+jedis.get("key001"));
         //2、直接覆盖原来的数据  
         System.out.println("在key002原来值后面追加:"+jedis.append("key002","+appendString"));
         System.out.println("获取key002对应的新值"+jedis.get("key002")); 
    
         System.out.println("=============增,删,查(多个)=============");
         /** 
          * mset,mget同时新增,修改,查询多个键值对 
          * 等价于:
          * jedis.set("name","ssss"); 
          * jedis.set("jarorwar","xxxx"); 
          */  
         System.out.println("一次性新增key201,key202,key203,key204及其对应值:"+jedis.mset("key201","value201",
                         "key202","value202","key203","value203","key204","value204"));  
         System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
                         jedis.mget("key201","key202","key203","key204"));
         System.out.println("一次性删除key201,key202:"+jedis.del(new String[]{"key201", "key202"}));
         System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
                 jedis.mget("key201","key202","key203","key204")); 
         System.out.println();
                 
             
         //jedis具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法
         System.out.println("======================String_2=========================="); 
         // 清空数据 
         System.out.println("清空库中所有数据:"+jedis.flushDB());       
        
         System.out.println("=============新增键值对时防止覆盖原先值=============");
         System.out.println("原先key301不存在时,新增key301:"+shardedJedis.setnx("key301", "value301"));
         System.out.println("原先key302不存在时,新增key302:"+shardedJedis.setnx("key302", "value302"));
         System.out.println("当key302存在时,尝试新增key302:"+shardedJedis.setnx("key302", "value302_new"));
         System.out.println("获取key301对应的值:"+shardedJedis.get("key301"));
         System.out.println("获取key302对应的值:"+shardedJedis.get("key302"));
         
         System.out.println("=============超过有效期键值对被删除=============");
         // 设置key的有效期,并存储数据 
         System.out.println("新增key303,并指定过期时间为2秒"+shardedJedis.setex("key303", 2, "key303-2second")); 
         System.out.println("获取key303对应的值:"+shardedJedis.get("key303")); 
         try{ 
             Thread.sleep(3000); 
         } 
         catch (InterruptedException e){ 
         } 
         System.out.println("3秒之后,获取key303对应的值:"+shardedJedis.get("key303")); 
         
         System.out.println("=============获取原值,更新为新值一步完成=============");
         System.out.println("key302原值:"+shardedJedis.getSet("key302", "value302-after-getset"));
         System.out.println("key302新值:"+shardedJedis.get("key302"));
         
         System.out.println("=============获取子串=============");
         System.out.println("获取key302对应值中的子串:"+shardedJedis.getrange("key302", 5, 7));
     }

     private void ListOperate() {
         System.out.println();
         System.out.println("list 功能 :"); 
         // 清空数据 
         System.out.println("清空库中所有数据:"+jedis.flushDB()); 

         System.out.println("=============增=============");
         shardedJedis.lpush("stringlists", "vector"); 
         shardedJedis.lpush("stringlists", "ArrayList"); 
         shardedJedis.lpush("stringlists", "vector");
         shardedJedis.lpush("stringlists", "vector");
         shardedJedis.lpush("stringlists", "LinkedList");
         shardedJedis.lpush("stringlists", "MapList");
         shardedJedis.lpush("stringlists", "SerialList");
         shardedJedis.lpush("stringlists", "HashList");
         shardedJedis.lpush("numberlists", "3");
         shardedJedis.lpush("numberlists", "1");
         shardedJedis.lpush("numberlists", "5");
         shardedJedis.lpush("numberlists", "2");
         System.out.println("所有元素-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
         System.out.println("所有元素-numberlists:"+shardedJedis.lrange("numberlists", 0, -1));
         
         System.out.println("=============删=============");
         // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈
         System.out.println("成功删除指定元素个数-stringlists:"+shardedJedis.lrem("stringlists", 2, "vector")); 
         System.out.println("删除指定元素之后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
         // 删除区间以外的数据 
         System.out.println("删除下标0-3区间之外的元素:"+shardedJedis.ltrim("stringlists", 0, 3));
         System.out.println("删除指定区间之外元素后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
         // 列表元素出栈 
         System.out.println("出栈元素:"+shardedJedis.lpop("stringlists")); 
         System.out.println("元素出栈后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
         
         System.out.println("=============改=============");
         // 修改列表中指定下标的值 
         shardedJedis.lset("stringlists", 0, "hello list!"); 
         System.out.println("下标为0的值修改后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
         System.out.println("=============查=============");
         // 数组长度 
         System.out.println("长度-stringlists:"+shardedJedis.llen("stringlists"));
         System.out.println("长度-numberlists:"+shardedJedis.llen("numberlists"));
         // 排序 
         /*
          * list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),
          * 会出现"ERR One or more scores can't be converted into double"
          */
         SortingParams sortingParameters = new SortingParams();
         sortingParameters.alpha();
         sortingParameters.limit(0, 3);
         System.out.println("返回排序后的结果-stringlists:"+shardedJedis.sort("stringlists",sortingParameters)); 
         System.out.println("返回排序后的结果-numberlists:"+shardedJedis.sort("numberlists"));
         // 子串:  start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素
         System.out.println("子串-第二个开始到结束:"+shardedJedis.lrange("stringlists", 1, -1));
         // 获取列表指定下标的值 
         System.out.println("获取下标为2的元素:"+shardedJedis.lindex("stringlists", 2)+"\n");
     }

     private void SetOperate() {
         System.out.println();
         System.out.println("set 功能 :"); 
         // 清空数据 
         System.out.println("清空库中所有数据:"+jedis.flushDB());
         
         System.out.println("=============增=============");
         System.out.println("向sets集合中加入元素element001:"+jedis.sadd("sets", "element001")); 
         System.out.println("向sets集合中加入元素element002:"+jedis.sadd("sets", "element002")); 
         System.out.println("向sets集合中加入元素element003:"+jedis.sadd("sets", "element003"));
         System.out.println("向sets集合中加入元素element004:"+jedis.sadd("sets", "element004"));
         System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets")); 
         System.out.println();
         
         System.out.println("=============删=============");
         System.out.println("集合sets中删除元素element003:"+jedis.srem("sets", "element003"));
         System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));
         /*System.out.println("sets集合中任意位置的元素出栈:"+jedis.spop("sets"));//注:出栈元素位置居然不定?--无实际意义
         System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));*/
         System.out.println();
         
         System.out.println("=============改=============");
         System.out.println();
         
         System.out.println("=============查=============");
         System.out.println("判断element001是否在集合sets中:"+jedis.sismember("sets", "element001"));
         System.out.println("循环查询获取sets中的每个元素:");
         Set<String> set = jedis.smembers("sets");   
         Iterator<String> it=set.iterator() ;   
         while(it.hasNext()){   
             Object obj=it.next();   
             System.out.println(obj);   
         }  
         System.out.println();
         
         System.out.println("=============集合运算=============");
         System.out.println("sets1中添加元素element001:"+jedis.sadd("sets1", "element001")); 
         System.out.println("sets1中添加元素element002:"+jedis.sadd("sets1", "element002")); 
         System.out.println("sets1中添加元素element003:"+jedis.sadd("sets1", "element003")); 
         System.out.println("sets1中添加元素element002:"+jedis.sadd("sets2", "element002")); 
         System.out.println("sets1中添加元素element003:"+jedis.sadd("sets2", "element003")); 
         System.out.println("sets1中添加元素element004:"+jedis.sadd("sets2", "element004"));
         System.out.println("查看sets1集合中的所有元素:"+jedis.smembers("sets1"));
         System.out.println("查看sets2集合中的所有元素:"+jedis.smembers("sets2"));
         System.out.println("sets1和sets2交集:"+jedis.sinter("sets1", "sets2"));
         System.out.println("sets1和sets2并集:"+jedis.sunion("sets1", "sets2"));
         System.out.println("sets1和sets2差集:"+jedis.sdiff("sets1", "sets2"));//差集:set1中有,set2中没有的元素
     }

     private void SortedSetOperate() 
     { 
         System.out.println();
         System.out.println("zset 功能 :"); 
         // 清空数据 
         System.out.println(jedis.flushDB()); 
         
         System.out.println("=============增=============");
         System.out.println("zset中添加元素element001:"+shardedJedis.zadd("zset", 7.0, "element001")); 
         System.out.println("zset中添加元素element002:"+shardedJedis.zadd("zset", 8.0, "element002")); 
         System.out.println("zset中添加元素element003:"+shardedJedis.zadd("zset", 2.0, "element003")); 
         System.out.println("zset中添加元素element004:"+shardedJedis.zadd("zset", 3.0, "element004"));
         System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));//按照权重值排序
         System.out.println();
         
         System.out.println("=============删=============");
         System.out.println("zset中删除元素element002:"+shardedJedis.zrem("zset", "element002"));
         System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));
         System.out.println();
         
         System.out.println("=============改=============");
         System.out.println();
         
         System.out.println("=============查=============");
         System.out.println("统计zset集合中的元素中个数:"+shardedJedis.zcard("zset"));
         System.out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:"+shardedJedis.zcount("zset", 1.0, 5.0));
         System.out.println("查看zset集合中element004的权重:"+shardedJedis.zscore("zset", "element004"));
         System.out.println("查看下标1到2范围内的元素值:"+shardedJedis.zrange("zset", 1, 2));

     }
   
     private void HashOperate() 
     { 
         System.out.println();
         System.out.println("hash 功能 :");
         //清空数据 
         System.out.println(jedis.flushDB()); 
         
         System.out.println("=============增=============");
         System.out.println("hashs中添加key001和value001键值对:"+shardedJedis.hset("hashs", "key001", "value001")); 
         System.out.println("hashs中添加key002和value002键值对:"+shardedJedis.hset("hashs", "key002", "value002")); 
         System.out.println("hashs中添加key003和value003键值对:"+shardedJedis.hset("hashs", "key003", "value003"));
         System.out.println("新增key004和4的整型键值对:"+shardedJedis.hincrBy("hashs", "key004", 4l));
         System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
         System.out.println();
         
         System.out.println("=============删=============");
         System.out.println("hashs中删除key002键值对:"+shardedJedis.hdel("hashs", "key002"));
         System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
         System.out.println();
         
         System.out.println("=============改=============");
         System.out.println("key004整型键值的值增加100:"+shardedJedis.hincrBy("hashs", "key004", 100l));
         System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
         System.out.println();
         
         System.out.println("=============查=============");
         System.out.println("判断key003是否存在:"+shardedJedis.hexists("hashs", "key003"));
         System.out.println("获取key004对应的值:"+shardedJedis.hget("hashs", "key004"));
         System.out.println("批量获取key001和key003对应的值:"+shardedJedis.hmget("hashs", "key001", "key003")); 
         System.out.println("获取hashs中所有的key:"+shardedJedis.hkeys("hashs"));
         System.out.println("获取hashs中所有的value:"+shardedJedis.hvals("hashs"));
         System.out.println();
               
     }
    
}


  • 测试类:Redis/src/com/redis/Main.java

package com.redis;
public class Main {
    
    public static void main(String[] args) {
        System.out.println("-------------开始测试---------------");
        System.out.println();
        new RedisClient().show();
        System.out.println();
        System.out.println("-------------结束测试---------------");
    }
}

  • 运行结果:

-------------开始测试---------------
Key 功能 :
清空库中所有数据: OK
新增 key001,value001键值对: OK
新增 key002,value002键值对: OK
判断key001是否存在: true
输出系统中所有的key:
key002
key001
删除某个key,若key不存在这忽略命令: 1
判断key002是否存在: false
设置key001的过期时间: 1
返回某个key001的剩余有效时间: 3
设置某个key001的生存时间: 1
string
重命名key001: OK
将当前db中的key移动到指定的db当中: 0
String 功能 :
清空库中所有数据:OK
=============增=============
已新增的3个键值对如下:
value001
value002
value003
=============删=============
删除key003键值对:1
获取key003键对应的值:null
=============改=============
直接覆盖key001原来的数据:OK
获取key001对应的新值:value001-update
在key002原来值后面追加:21
获取key002对应的新值value002+appendString
=============增,删,查(多个)=============
一次性新增key201,key202,key203,key204及其对应值:OK
一次性获取key201,key202,key203,key204各自对应的值:[value201, value202, value203, value204]
一次性删除key201,key202:2
一次性获取key201,key202,key203,key204各自对应的值:[null, null, value203, value204]
======================String_2==========================
清空库中所有数据:OK
=============新增键值对时防止覆盖原先值=============
原先key301不存在时,新增key301:1
原先key302不存在时,新增key302:1
当key302存在时,尝试新增key302:0
获取key301对应的值:value301
获取key302对应的值:value302
=============超过有效期键值对被删除=============
新增key303,并指定过期时间为2秒OK
获取key303对应的值:key303-2second
3秒之后,获取key303对应的值:null
=============获取原值,更新为新值一步完成=============
key302原值:value302
key302新值:value302-after-getset
=============获取子串=============
获取key302对应值中的子串:302
list 功能 :
清空库中所有数据:OK
=============增=============
所有元素-stringlists:[HashList, SerialList, MapList, LinkedList, vector, vector, ArrayList, vector]
所有元素-numberlists:[2, 5, 1, 3]
=============删=============
成功删除指定元素个数-stringlists:2
删除指定元素之后-stringlists:[HashList, SerialList, MapList, LinkedList, ArrayList, vector]
删除下标0-3区间之外的元素:OK
删除指定区间之外元素后-stringlists:[HashList, SerialList, MapList, LinkedList]
出栈元素:HashList
元素出栈后-stringlists:[SerialList, MapList, LinkedList]
=============改=============
下标为0的值修改后-stringlists:[hello list!, MapList, LinkedList]
=============查=============
长度-stringlists:3
长度-numberlists:4
返回排序后的结果-stringlists:[LinkedList, MapList, hello list!]
返回排序后的结果-numberlists:[1, 2, 3, 5]
子串-第二个开始到结束:[MapList, LinkedList]
获取下标为2的元素:LinkedList
set 功能 :
清空库中所有数据:OK
=============增=============
向sets集合中加入元素element001:1
向sets集合中加入元素element002:1
向sets集合中加入元素element003:1
向sets集合中加入元素element004:1
查看sets集合中的所有元素:[element001, element002, element003, element004]
=============删=============
集合sets中删除元素element003:1
查看sets集合中的所有元素:[element001, element002, element004]
=============改=============
=============查=============
判断element001是否在集合sets中:true
循环查询获取sets中的每个元素:
element001
element002
element004
=============集合运算=============
sets1中添加元素element001:1
sets1中添加元素element002:1
sets1中添加元素element003:1
sets1中添加元素element002:1
sets1中添加元素element003:1
sets1中添加元素element004:1
查看sets1集合中的所有元素:[element001, element002, element003]
查看sets2集合中的所有元素:[element002, element003, element004]
sets1和sets2交集:[element002, element003]
sets1和sets2并集:[element001, element002, element003, element004]
sets1和sets2差集:[element001]
zset 功能 :
OK
=============增=============
zset中添加元素element001:1
zset中添加元素element002:1
zset中添加元素element003:1
zset中添加元素element004:1
zset集合中的所有元素:[element003, element004, element001, element002]
=============删=============
zset中删除元素element002:1
zset集合中的所有元素:[element003, element004, element001]
=============改=============
=============查=============
统计zset集合中的元素中个数:3
统计zset集合中权重某个范围内(1.0——5.0),元素的个数:2
查看zset集合中element004的权重:3.0
查看下标1到2范围内的元素值:[element004, element001]
hash 功能 :
OK
=============增=============
hashs中添加key001和value001键值对:1
hashs中添加key002和value002键值对:1
hashs中添加key003和value003键值对:1
新增key004和4的整型键值对:4
hashs中的所有值:[value001, value002, value003, 4]
=============删=============
hashs中删除key002键值对:1
hashs中的所有值:[value001, value003, 4]
=============改=============
key004整型键值的值增加100:104
hashs中的所有值:[value001, value003, 104]
=============查=============
判断key003是否存在:true
获取key004对应的值:104
批量获取key001和key003对应的值:[value001, value003]
获取hashs中所有的key:[key004, key003, key001]
获取hashs中所有的value:[value001, value003, 104]
-------------结束测试---------------


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容