`
yale
  • 浏览: 356719 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

redis jredis jedis 使用

 
阅读更多

一、     简介

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合(list,set ,sorted sethash)。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为半持久化模式”);也可以把每一次数据变化都写入到一个里面(这称为全持久化模式”),本来可以采用memcache,但是memcache value只包括string类型。远没有redisvalue类型丰富。redis也支持主从复制机制(master-slave replication)。redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。还有各种语言版本的开源客户端类库,类似的开源产品有很多,我接触过的有memcache、membase、memlink。

注意:以下介绍redis文件存放的路径位置会因为版本的不一样,而默认存放的位置不一样,比如:redis1.6redis.conf存放在redis的根目录下,而redis2.2.5redis.conf存放在redis/src/下面,因此以下讲解中文件存放位置会因此版本的不一致,导致默认文件位置不一致

二、     安装

1)         下载redis

目前redis的版本已经到了2.2.5版本,但是我们客户端采用的是jredis,而并非jedis,因此针对于jredis,我们下载的redis版本不能超过1.2.6,因为jredis官方网站上已经做了说明:如下图:

因此,如果客户端用到jredis请到该地址下载redis1.2.6版本http://code.google.com/p/redis/downloads/list,因此经过我的测试,我能肯定jredis不支持redis的高版本,在调用时,会抛出异常,但是如果用到jedis作为客户端,那么可以用到redis的高版本,但是jedis不支持list作为值进行保存(最基本的区别)

2)         解压缩

解压缩下载下来的redis

3)         安装C/C++的编译组件(非必须)

apt-get install build-essential

4)         编译

cd redis-2.2.5
make

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-serverredis-cliredis-benchmarkredis-stat,它们的作用如下:

redis-serverRedis服务器的daemon启动程序

redis-cliRedis命令行操作工具。你也可以用telnet根据其纯文本协议来操作

redis-benchmarkRedis性能测试工具,测试Redis在你的系统及你的配置下的读写性能

redis-statRedis状态检测工具,可以检测Redis当前状态参数及延迟状况

5)         启动服务

Ø         默认启动

在我们成功安装Redis后,我们直接执行redis-server即可运行Redis,此时它是按照默认配置来运行的(默认配置甚至不是后台运行)。

首先进入到redis src目录下,然后命令  ./redis-server启动

Ø         配置启动

我们希望Redis按我们的要求运行,则我们需要修改配置文件,首先把Redis的配置文件 redis.conf  cp  /etc目录下,修改它就可以配置我们的server了,配置内容参考 六、相关配置文件及说明,配置完成后,可以通过下面的命令启动服务器:

/……/redis-server  /……./etc/redis.conf(后台启动)  或者 /……/redis-server(非后台启动)

Ø         查看是否启动成功
 ps -ef | grep redis(
通过进程查看服务是否后台开启,非后台启动可以直接查看

Ø         关闭服务

redis-cli shutdown  

Ø         简单测试

开启redis自带的工具redis-cli进行测试。 通过setget进行简单的保存、获取以及保存本地硬盘测试

Ø         添加到开机启动

        vi /etc/rc.d/rc.local

redis-server / etc/redis.conf  

最后还要开放redis的端口,否则客户端无法连接。方法如下:

vi /etc/sysconfig/iptables #需要具备其修改权限

增加一行:

# redis
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

保存后重启iptables:

service iptables restart PATH中加入了/sbin/)或者 /etc/init.d/iptables restart

三、     相关配置文件说明及修改

Ø         /etc/sysctl.conf

添加:vm.overcommit_memory=1  刷新配置使之生效

Ø        
/proc/sys/vm/overcommit_memory

如果内存情况比较紧张的话,需要设定内核参数:

overcommit_memory文件指定了内核针对内存分配的策略,其值可以是012
0
表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1
表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2
表示内核允许分配超过所有物理内存和交换空间总和的内存

Ø         /etc/redis.conf

redis.conf配置选项如下:
daemonize
是否以后台进程运行,默认为no
pidfile
如以后台进程运行,则需指定一个pid,默认为
/var/run/redis.pid
bind
绑定主机IP,默认值为127.0.0.1(注释)

port
监听端口,默认为6379
timeout
超时时间,默认为300(秒)

loglevel
日志记录等级,有4个可选值,debugverbose(默认值),noticewarning
logfile
日志记录方式,默认值为
stdout
databases
可用数据库数,默认值为16,默认数据库为
0
save
指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

save 900 1 900
秒(15分钟)内至少有1key被改变
save 300 10 300
秒(5分钟)内至少有300key被改变
save 60 10000 60
秒内至少有10000key被改变
rdbcompression
存储至本地数据库时是否压缩数据,默认为yes
dbfilename
本地数据库文件名,默认值为
dump.rdb
dir
本地数据库存放路径,默认值为
./
slaveof
当本机为从服务时,设置主服务的IP及端口(注释)

masterauth
当本机为从服务时,设置主服务的连接密码(注释)
requirepass
连接密码(注释)
maxclients
最大客户端连接数,默认不限制(注释)
maxmemory
设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)
appendonly
是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendfilename
更新日志文件名,默认值为appendonly.aof(注释)

appendfsync
更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
vm-enabled
是否使用虚拟内存,默认值为no
vm-swap-file
虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm- max-memory
只可以使用内存的最大值 如果超过了此值就使用虚拟内存了交换是使用次数少为主放在虚拟内存中去。默认值为0

四、     测试

Ø         JAVA客户端调用测试

要建立java客户端测试环境,首先需要redis客户端调用所依赖的java包,我用了两种进行测试,1jredis  2jedis

我对上述两种客户端都做了测试代码的编写,有如下直观的区别:

Redis版本:2.5.5

Jredis: jredis直接抛出异常。

Jedis: 可以存入数据到服务器,但是不支持集合以及对象作为值保存。

 

Redis版本:1.6

Jredis: 可以正常的存取,也可以把对象和集合作为值进行存储。

Jedis: 可以存入数据到服务器,但是不支持集合以及对象作为值保存。

上述两种的共同的缺陷:不能保证高并发(我启动超过70个线程就开始有异常抛出,因此需要使用JedisPoolJedisPoolConfig实例,进行池化,否则难以支持大数据量的高并发)、大数据量的稳定性。

Jredis以及jedis的下载地址

jredis下载地址:http://code.google.com/p/jredis/

jedis下载地址:https://github.com/xetorthio/jedis/downloads

 

图片中是我开启70个线程进行取值的截图:

 

相关代码在附件中下载

 

Ø         系统自带工具测试

下面是我做的一个简单的测试,首选保存相应的数据到内存中,然后从内存中获取保存的信息,最后把保存在内存中的数据dump到硬盘中。

命令到redissrc目录下启动客户端(前提要先启动服务端,我这里便于测试,没有通过后台启动,通过非后台启动便于观察)

非后台启动服务端:/…./redis-server

客户端启动:/…/redis-cli

客户端执行:set(保存一个键值对)  key  value,get (得到一个键值对) key如下图:

 

服务器端显示如下图:

 

 

客户端执行:save命令,如下图:


服务器端显示如下图:

 

保存到硬盘中的文件为:

 

打开该文件后,可以查看相应保存的信息。

分享到:
评论
2 楼 langmanxingkong123 2015-07-24  
谁说jedis不能存集合类的数据。乱说。。。
1 楼 finallygo 2011-11-02  
jedis的使用怎么不说???

相关推荐

    Redis框架Jedis及Redisson对比解析

    主要介绍了Redis框架Jedis及Redisson对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    redis客户端jredis技术实现

    jedis实现对redis的string、hash、link、set、sort set等redis支持的数据类型的操作方法,通过配置属性实现单机redis和集群redis的快速实现,集群redis采用哨兵sentinel模式。

    redis java client-jedis

    Redis支持很多编程语言的客户端,有C、C#、C++、Clojure、Common Lisp、Erlang、Go、Lua、...Redis官方列出的Java客户端也有少,有Jedis、JRedis、JDBC-Redis、RJC等,当然,Jedis是Redis官方首选的Java客户端开发包。

    SpringMVC整合Redis集群

    项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。

    java-redis部分内容相关笔记

    关于Java-redis及其jedis相关学习文档内容,供大家参考使用

    jedis-2.9.0-API文档-中文版.zip

    对应Maven信息:groupId:redis.clients,artifactId:jedis,version:2.9.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...

    jedis依赖jar包

    jedis依赖jar包, jedis-2.7.0.jar

    SSH2中配置Redis缓存

    Redis是基于内存,也可以基于磁盘持久化nosql数据库。Redis 官网推荐给java 使用的客户端很多:Jedis、Redisson、JRedis、JDBC-Redis 等,当然首推是jedis。

    jedis.zip——java开发redis的工具类

    java开发redis的工具类。适合的redis结构为主从分区(16分区),并不适合redis_cluster

    javaredis源码-jredis-master:java实现redis

    jedis,spring-data-redis,spring-boot-starter-redis support redisDesktop management tool with v0.9+ 建筑学 RAM中仅使用键,该值是延迟加载 逐出政策 LRU algorithm 线性存储 1.based on jdk's MappedByteBuffer...

    jedis-2.7.2.jar

    Java redis 驱动,提供java对redis的支持,Redis官方首选的Java客户端开发包,用于java开发使用

    redis集群工具包和配置

    在windows环境下配置redis集群,需要下载rubyinstaller,还要下载devkit,下载rubygems,具体配置可以百度,我这里是包含全部的工具包,和Jredis的jar包。

    SpringBoot+Redis执行lua脚本的方法步骤

    主要介绍了SpringBoot+Redis执行lua脚本的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    SpringDataRedis Demo

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    spring-data-redis-demo.rar

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    spring-data-redis-demo

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    SpringDataRedis.rar

    1 该spring系列框架实现了对jedis以及jredis,rjc的高度封装 2通过简单配置实现对redis的操作,使用更加简单方便 3可直接应用到项目中

    spring-data-redis-1.7.10.RELEASE jar包

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    jedis-2.8.src.jar

    jedis-2.8.src.jar,学习Jedis的源码,很好的资源,值得学习

Global site tag (gtag.js) - Google Analytics