美文网首页redis学习Java程序员
redis(二)redis概述与jedis的使用

redis(二)redis概述与jedis的使用

作者: kk少年 | 来源:发表于2018-01-14 23:31 被阅读46次

redis是一个高性能的、支持网络、可基于内存的key-value存储机制的NoSQL数据库。基于内存的特性使得redis有非比寻常的性能优势。

关于redis的数据结构

作为key-value的数据库,redis存储的数据类型不止数值类型和字符串类型,还包括以下几种数据类型:

hash类型

hash类型是一种散列类型,和java中的hashMap很像,存储的值可以包括多个不重复字段,例如一个User对象的name和age都可以作为hash类型的一个字段,相对于将每个字段单独存储为String类型,hash类型更节省内存,因为redis的hash是用zipMap来存储的,并不是hashTable, zipmap 相比正常的 hash实现可以节省不少hash本身需要的一些存储开销,虽然这样使得hash的属性的添加、删除和查找的时间复杂度为O(n),但是一般用hash类型存储对象,而对象的属性一般不会太多,因此平均时间复杂度接近于O(1),并且,当field或value的大小超过一定大小时,redis会将hash类型从zipMap转换成正常的hash实现,这个限制可以在配置文件中如下指定

hash-max-zipmap-entries 64 #配置字段最多 64 个
hash-max-zipmap-value 512 #配置 value 最大为 512 字节

list类型

list类型是一种有序的列表类型,实现是用双向链表实现的。主要的功能有push、pop、获取列表中某个范围的元素等,存储的值都是string类型,list因为是双向链表结构,可以作为栈和队列使用。

set类型

set 类型是一种集合类型,它是无序的不可重复的,set是通过hashTable实现的,因而增删查找的复杂度都是O(1),set的操作包括set类型的交并补。

sortedSet类型

sortedSet是一种有序的Set类型,通过指定一个Score属性作为排序的域,这个域的值可以修改,每次指定score值后,sortedSet会对元素进行排序,因此插入的效率低于set,包括的功能和set类型相似,sortedSet最经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为score 存储,对象的id当元素存储。

jedis 介绍

jedis是一个用java写的redis数据库操作的客户端,通过jedis,可以很方便的对redis数据库进行操作,jedis的api的学习成本也很低,源码很简单,有时间的同学可以看一下源码,jedis很多对数据库的操作的方法名都是和redis-cli的API一致,关于redis-cli的API ,常用的有以下:


redis-cli 常用命令

简单代码演示:

@Test
public void useJedis(){
    //创建jedis对象
    Jedis jedis = new Jedis("127.0.0.1",6379,5000);
    //认证密码,如果没有密码不需要此步
    jedis.auth("password");
    //选择数据库序号
    jedis.select(1);
    //存值
    jedis.set("testStringKey","Hello Redis!");
    jedis.hset("testHashKey","msg","Hello Redis too!");

    //取值
    System.out.println(jedis.get("testStringKey"));
    System.out.println(jedis.hget("testHashKey","msg"));

    jedis.close();
}

/**
 * 使用连接池
 */
@Test
public void useRedisPool(){
    JedisPoolConfig config = new JedisPoolConfig();
    //设置最大十个连接,具体编程需要根据情况配置
    config.setMaxTotal(10);
    JedisPool jedisPool = new JedisPool(config,"127.0.0.1",
            6379,5000,"password");
    Jedis jedis = jedisPool.getResource();

    //存值
    jedis.set("testStringKey","Hello Redis!");
    jedis.hset("testHashKey","msg","Hello Redis too!");

    //取值
    System.out.println(jedis.get("testStringKey"));
    System.out.println(jedis.hget("testHashKey","msg"));
    /**
     * 关闭资源,使用连接池的时候,jedis.close方法对资源的处理并不是释放,而是归还连接池
     */
    jedis.close();
    jedisPool.close();
}

更详细的jedis的API介绍移步jedis-2.9-doc

相关文章

网友评论

    本文标题:redis(二)redis概述与jedis的使用

    本文链接:https://www.haomeiwen.com/subject/ofoloxtx.html