发表于: 2017-11-11 22:53:03

1 816


今天完成的事情

学习redis

redis是NoSQL数据库,Not Only SQL,非关系型数据库

redis是一个key-value存储系统,支持存储的value类型相对较多,包括Stirng,list,set,hash,操作都是原子性的,数据都是还存在内存中,可以周期性地把更新的数据写入磁盘或者把修改操作写入追加的记录文件中

所谓原子性,是指对于一系列操作,要么完整的被执行,要么完全不执行,这种特性就叫做原子性。

redis相比于其他key-value缓存,有以下特点:

redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载

redis不仅支持key-value类型的数据,还提供了list等数据结构的存储

windows下的redis软件的下载:https://github.com/MSOpenTech/redis/releases

根据自己的系统版本选择32位还是64位,下载,解压到指定文件夹,将文件夹重命名位redis

打开cmd,cd到redis目录下,运行redis-server.exe redis.windows.conf

成功运行的话,会出现以下界面:

表示启动成功,开启另一个cmd,原来的不关闭,cd到redis目录下,输入redis-cli.exe  -h  127.0.0.1  -p  6379

设置键值对  set  mykey test1

获取键值对  get  mykey  

如下:

获取成功


基本命令

查看所有key    kyes  *   或   keys  " * "

查看前缀匹配的keys     keys  "header*"

清空redis   flushdb

随机取出一个key    randomkey

查看 key的类型   type  key

查看数据库中key的数量   dbsize

查看服务器信息    info

查看日志   slowlog  get 

存储    set  key   value

获取值   get  key


尝试在Java中使用redis,需要确保安装了redis服务,Java redis 驱动,以及Java开发环境

Java redis驱动为jedis,jar,在maven仓库中就有

jedis是redis的Java版本的一种客户端实现,redis的Java客户端在GitHub上start最高的是jedis和redisson,jedis提供了完整的redis命令,而redisson有更多分布式的容器实现

在pom中添加依赖

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

进行测试:

/**
* 连接到redis服务
*/
@org.junit.Test
public void RedisJava(){
//连接到本地的Redis
   Jedis jedis = new Jedis("localhost");
   System.out.println("连接成功");
   //查看服务是否运行
   System.out.println("服务正在运行:"+jedis.ping());
}

创建Jedis对象,并建立连接

利用ping()来检查网络是否联通

需要如之前的步骤一样,先在cmd中cd到redis目录下,输入redis-server.exe redis.windows.conf以启动redis,执行单元测试:

测试字符串类型:

/**
* 字符转
*/
@org.junit.Test
public void RedisStringJava(){
//连接本地的Redis服务
   Jedis jedis = new Jedis("localhost");
   System.out.println("连接成功");
   //设置redis字符串数据
   jedis.set("test2","hello world");
   //获取存储的数据并输出
   System.out.println("redis存储的字符串为:"+jedis.get("test2"));
}

调用set方法添加,并调用get方法获取到值:

测试list类型

/**
* 列表
*/
@org.junit.Test
public void RedisListJava(){
//连接本地的Redis服务
   Jedis jedis = new Jedis("localhost");
   //存储数据到列表中
   jedis.lpush("site-list","list-1");
   jedis.lpush("site-list","list-2");
   jedis.lpush("site-list","list-3");
   //获取存储的数据并输出
   List<String> list = jedis.lrange("site-list",0,2);
   for (int i = 0; i < list.size(); i++) {
      System.out.println("列表项为:"+list.get(i));
   }
}

通过lpush方法添加,lrange方法获取,将获取的元素都放入list列表中,然后遍历元素,用get方法获取每一个元素

redis中的list类型是单向链表,后添加的元素会被添加到头部,在获取并装入list列表中时,后添加的元素下标较小,所以下标为0的元素是最后添加的list-3,最后打印出来的顺序和添加时的顺序相反。


为了避免每次使用Jedis对象时都重新构建,Jedis提供了JedisPool,JedisPool是基于Commons Pool2 实现的一个线程安全的连接池,准备明天再实现


明天的计划

配置redis的连接池


遇到的问题



收获

了解了一些redis和数据结构的知识


返回列表 返回列表
评论

    分享到