发表于: 2017-11-01 23:16:18

1 857


今天完成的任务:

1.今天准备学习一下json格式传数据。

json官网,有中文的语言可以选择。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

 

百度查到的解释:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

对象:对象在JS中是使用花括号包裹 { } 起来的内容,数据结构为 {key1value1, key2value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

 

然后看一下怎么使用json

首先需要有依赖:关于json需要使用的jar包,包括json特有的注解等。

有配置文件:配置文件有好几种配置的方法,暂时感觉好像效果是一样的。。就是配置一个就json格式的转化器。参考:http://blog.csdn.net/l3922768721/article/details/51606976

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property
name="messageConverters">
        <list>
            
<!--json转换器-->
           
<ref bean="mappingJacksonHttpMessageConverter"/>
        </list>
    </property>
</bean>
<bean
id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property
name="supportedMediaTypes">
        <list>
            <value>
application/json;charset=UTF-8</value>
        </list>
    </property>
</bean>

然后使用@RequestBody注解和@ResponseBody来讲对象转换成json和将json转换成对象类型。

@Controller
public class JsonController {
@RequestMapping(value = "{name}",method = RequestMethod.GET)
       
public @ResponseBody User JsonTest(@PathVariable String name){
            System.
out.println("开始");
           
User  user =new User();
           
user.setName(name);
           
user.setId(1);
return
user;
       
}
}

结果:

 

2.学习一下redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库 Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。Redis运行在内存中但是可以持久化到磁盘,持久化的实现:一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。

 

另外redis是一种非关系型数据库(NosqlNot Only Sql

了解一下关系型数据库和非关系型数据库。

引用于波涛大佬的回答

关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

非关系型数据库中,我们查询一条数据,结果出来一个对象,关系型数据库中,查询一条数据结果是一个数组。

另外,还有一些不是特别正经的答案,感觉有那么一点道理

用一种不精确但容易理解的方法来说:

关系型数据库 = 非关系数据库 + 关系功能
并且,【关系功能】会占用掉90%的硬件资源以及90%的计算时间。

很多互联网公司,有大量业务,不需要关系功能,非关系数据库就能搞定。因此,非关系型数据库就火起来了。

 

大概了解了Nosql,继续redis

先下载压缩包

然后在cmd中进入安装文件,输入 redis-server.exe redis.windows.conf 

 

重新打开一个cmd,然后再去连接,之前的不能关!!!

连接好了可以试一下setget

参考:http://www.runoob.com/redis/redis-install.html

然后可视化工具,看大佬都在用就去下载了一个,很简单下载安装就可以用了。

https://redisdesktop.com/download

 

 

好了现在可以在代码中试一下用用redis

先添加依赖

需要有jediscommon-pool两个依赖。

 

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>2.9.0</version>
</dependency>

然后直接试一下在代码里面写一个main方法是可以运行调用redis的。

下一步,看到大家使用redis的时候都会使用一个连接池来操作,就写一个连接池的类,然后不是一次一次的获取缓存中的值,这和我们使用c3p0连接池应该一个意思。

public class RedisUtil {
   
//Redis服务器地址
   
private static String address = "localhost";
   
//Redis服务器端口号
   
private static int port = 6379;
   
//访问密码
    //private static String auth = null;
    //
可用连接实例的最大数目,默认值为8
    //
如果赋值为-1,则表示不限制;如果pool已经分配了maxActivejedis实例,则此时pool的状态为exhausted(耗尽)
    //private static final int MAX_ACTIVE = 1024;

    //
控制一个pool最多有多少个状态为idle(空闲的)jedis实例,默认值也是8
   
private static int MAX_IDLE = 10;
   
//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
   
private static int MAX_WAIT = 10000;
    private static int
TIMEOUT = 10000;
   
//borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
   
private static boolean TEST_ON_BORROW = true;
    private static
JedisPool jedisPool;
    static
{
        JedisPoolConfig config =
new JedisPoolConfig();
       
config.setMaxIdle(MAX_IDLE);
       
config.setMaxWaitMillis(MAX_WAIT);
       
config.setTestOnBorrow(TEST_ON_BORROW);
       
//config.setMaxTotal(MAX_ACTIVE);
       
jedisPool = new JedisPool(config, address, port, TIMEOUT);
   
}
//获取jedis实例。
   
public static Jedis getJedis() {
        Jedis jedis =
null;
        if
(null != jedisPool) {
            jedis =
jedisPool.getResource();
       
}
       
return jedis;
   
}
   
//返还资源
   
public static void returnResource() {
       
jedisPool.close();
   
}
}

上面的连接池里面有个配置连接池的方法,初始化。然后有一个获取连接池的实例化。然后一个关闭资源的方法。

 

有了连接池测试一下:

也没啥毛病。太顺利有点不习惯了。。。参考:http://www.cnblogs.com/baihaojie/p/5981339.html

 

连接池可以用了,然后可以使用将redis配置在Spring中。最终是要用Spring管理的还是。

 

Spring的配置:

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property
name="maxIdle" value="300" />
   
<!--最大空闲-->
   
<property name="maxTotal" value="600" />
   
<!--最大连接数-->
   
<property name="maxWaitMillis" value="1000" />
   
<!--最大等待时间-->
   
<property name="testOnBorrow" value="true" />
   
<!--borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;-->
</bean>
<!-- redis连接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy"  depends-on="poolConfig">
    <constructor-arg
name="poolConfig" ref="poolConfig" /> <!-- 加载jedisPool配置信息 -->
   
<constructor-arg name="host" value="127.0.0.1" /><!-- redis主机地址 -->
   
<constructor-arg name="port" value="6379"/> <!-- redis连接端口 -->
    <!-- <constructor-arg name="password" value="${redis.pass}"/>
密码 -->
    <!--<constructor-arg name="database" value="${redis.database}"/>
数据库 -->
    <!--<constructor-arg name="timeout" value="${redis.timeout}"/>
连接超时 -->
</bean>

参考:http://blog.csdn.net/weixin_36751895/article/details/70254582


然后测试的时候想要把对象作为value放进去,但是发现好像不支持直接放入对象,所以首先需要有一个序列化和反序列化的工具类,然后才能放进去。 

序列化是:使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。当两个进程间进行通讯时可以相互发送任何资源(数据),这些资源包括图片、文本、音频、视频等,而这些资源在网络上传输的格式均为二进制序列(字节流)。

当两个java进程进行通讯时能否实现进程间的对象传输呢。是可以的,但必须完成对象的序列化,即将对象转换为二进制序列(字节流)的形式。

序列化的工具类:

实体类先要继承Serializable

public class User implements Serializable
public class SerializeUtil {
   
public static byte[] serialize(Object object) {
        ObjectOutputStream oos =
null;
       
ByteArrayOutputStream baos = null;
        try
{
           
// 序列化
           
baos = new ByteArrayOutputStream();
           
oos = new ObjectOutputStream(baos);
           
oos.writeObject(object);
            byte
[] bytes = baos.toByteArray();
            return
bytes;
       
} catch (Exception e) {

        }
       
return null;
   
}

   
public static Object unserialize(byte[] bytes) {
        ByteArrayInputStream bais =
null;
        try
{
           
// 反序列化
           
bais = new ByteArrayInputStream(bytes);
           
ObjectInputStream ois = new ObjectInputStream(bais);
            return
ois.readObject();
       
} catch (Exception e) {

        }
       
return null;
   
}
}

测试结果:


可以了,现在就在项目里面添加redis的配置和代码。

 

 

 

明天计划:

 明天在代码里面添上需要的,然后压测一下。

遇到问题:

 各种小问题吧,今天还好没什么卡的比较久的。

收获:

 学习了redis的使用。

禅道:

http://taskNaNteng.com/zentao/task-view-10340.html



返回列表 返回列表
评论

    分享到