- 浏览: 359918 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
missfmaster:
这框架好特么底层。
Terracotta设计原理分析--(部分内容来自官方描述) -
小黄牛:
很好不错!分享一个在电商购物支付流程中,在各大参与者系统中可能 ...
分布式事务设计-两段式提交 -
zhglhy:
学习了,感谢分享
JAVA垃圾回收分析 -
talentluke:
如果在事务一中出现故障,数据库是可以回滚但消息队列不能回滚,队 ...
用消息队列和消息应用状态表来消除分布式事务(转载) -
langmanxingkong123:
谁说jedis不能存集合类的数据。乱说。。。
redis jredis jedis 使用
一、 简介
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合(list,set ,sorted set和hash)。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个里面(这称为“全持久化模式”),本来可以采用memcache,但是memcache的 value只包括string类型。远没有redis的value类型丰富。redis也支持主从复制机制(master-slave replication)。redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。还有各种语言版本的开源客户端类库,类似的开源产品有很多,我接触过的有memcache、membase、memlink。
注意:以下介绍redis文件存放的路径位置会因为版本的不一样,而默认存放的位置不一样,比如:redis1.6中redis.conf存放在redis的根目录下,而redis2.2.5中redis.conf存放在redis/src/下面,因此以下讲解中文件存放位置会因此版本的不一致,导致默认文件位置不一致
二、 安装
1) 下载redis
目前redis的版本已经到了2.2.5版本,但是我们客户端采用的是jredis,而并非jedis,因此针对于jredis,我们下载的redis版本不能超过1.2.6,因为jredis官方网站上已经做了说明:如下图:
因此,如果客户端用到jredis请到该地址下载redis的1.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-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测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进行测试。 通过set、get进行简单的保存、获取以及保存本地硬盘测试
Ø 添加到开机启动
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文件指定了内核针对内存分配的策略,其值可以是0、1、2。
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个可选值,debug,verbose(默认值),notice,warning
logfile 日志记录方式,默认值为stdout
databases 可用数据库数,默认值为16,默认数据库为0
save 指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
save 900 1 900秒(15分钟)内至少有1个key被改变
save 300 10 300秒(5分钟)内至少有300个key被改变
save 60 10000 60秒内至少有10000个key被改变
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包,我用了两种进行测试,1、jredis 2、jedis
我对上述两种客户端都做了测试代码的编写,有如下直观的区别:
Redis版本:2.5.5
Jredis: jredis直接抛出异常。
Jedis: 可以存入数据到服务器,但是不支持集合以及对象作为值保存。
Redis版本:1.6
Jredis: 可以正常的存取,也可以把对象和集合作为值进行存储。
Jedis: 可以存入数据到服务器,但是不支持集合以及对象作为值保存。
上述两种的共同的缺陷:不能保证高并发(我启动超过70个线程就开始有异常抛出,因此需要使用JedisPool和JedisPoolConfig实例,进行池化,否则难以支持大数据量的高并发)、大数据量的稳定性。
Jredis以及jedis的下载地址
jredis下载地址:http://code.google.com/p/jredis/
jedis下载地址:https://github.com/xetorthio/jedis/downloads
图片中是我开启70个线程进行取值的截图:
相关代码在附件中下载
Ø 系统自带工具测试
下面是我做的一个简单的测试,首选保存相应的数据到内存中,然后从内存中获取保存的信息,最后把保存在内存中的数据dump到硬盘中。
命令到redis的src目录下启动客户端(前提要先启动服务端,我这里便于测试,没有通过后台启动,通过非后台启动便于观察)。
非后台启动服务端:/…./redis-server
客户端启动:/…/redis-cli
客户端执行:set(保存一个键值对) key value,get (得到一个键值对) key如下图:
服务器端显示如下图:
客户端执行:save命令,如下图:
服务器端显示如下图:
保存到硬盘中的文件为:
打开该文件后,可以查看相应保存的信息。
- redis.rar (673.6 KB)
- 下载次数: 537
评论
发表评论
-
王者荣耀是用什么语言开发的!
2020-10-29 19:24 12152017年什么最火? 不用问,肯定是人人都“ ... -
王者荣耀是用什么语言开发的!
2020-10-29 19:04 02017年什么最火? 不用问,肯定是人人都在撸的“王 ... -
tddl+diamond(二)
2013-05-05 15:37 11831diamond的相关原理介绍,我们已经通过其他的文章进行了 ... -
tddl+diamond(一)
2013-05-05 15:36 12375简介: tddl的相关介 ... -
webx3整合dubbo
2013-04-30 02:10 5487由于webx3是maven项目,d ... -
webx3初接触
2013-04-29 12:51 3297由于webx3采用maven管理 ... -
对淘宝tair分布式K、V的一些理解
2012-09-23 10:18 12733Tair是什么 Tair是由淘宝开发的key/value ... -
Terracotta Server[兵马俑]集群
2012-06-14 01:23 10817Terracotta的介绍以及原理在我之前的文章中已经做了相关 ... -
Terracotta设计原理分析--(部分内容来自官方描述)
2012-05-25 23:47 16815因为工作中历史产品采用了terracotta作为分布式缓存线性 ... -
HDFS框架中便于借鉴的设计
2012-05-25 14:03 1409HDFS几个设计特点: 1. ... -
hadoop分布式集群
2012-04-05 19:31 1839hadoop的基础知识我就不在这里介绍了,任何有关hado ... -
redis的主从复制配置
2011-04-28 22:24 3148一、 集群介绍 Redis的主从复制功能非常强大,一 ... -
JAVA垃圾回收分析
2011-04-23 12:17 5221JAVA垃圾回收简介java中 ... -
MemCache Java客户端的优化
2011-03-19 12:49 1709针对memcached Client进行的 ... -
Memcached缓存客户端连接池设计
2011-03-19 12:35 3127设计的目的就是为了解决资源的申请和释放的开销增加系统压力的问题 ... -
Redis考虑虚拟内存设计
2011-03-18 13:37 2127虚拟内存指当物理内存 ... -
Redis中持久化设计
2011-03-11 15:27 1140redis的设计是一个支持持久化的内存数据库,也就是说redi ... -
memcache特性、优点、限制
2011-02-14 17:10 5057这里需要说明,很多开发者觉得 Memcached ... -
JPA中利用二级缓存优化访问性能
2010-11-24 18:25 2660JPA使用也有好几年了,但是一直都没有对其中的缓存机制使用,我 ... -
zookeeper初探
2010-09-27 12:22 1601原理: ZK是Apache Hadoop的一个子项目(分布 ...
相关推荐
Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。 Redisson使用非阻塞的I/O和基于Netty框架的...
jedis实现对redis的string、hash、link、set、sort set等redis支持的数据类型的操作方法,通过配置属性实现单机redis和集群redis的快速实现,集群redis采用哨兵sentinel模式。
在Spring Boot应用中,集成JRedis(也称为Jedis,是一个Java客户端,用于操作Redis分布式内存数据库)可以增强应用程序的数据存储能力,特别是对于需要高并发、高性能读写操作的场景。下面将详细介绍如何进行集成...
项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。
Redis支持很多编程语言的客户端,有C、C#、C++、Clojure、Common Lisp、Erlang、Go、Lua、...Redis官方列出的Java客户端也有少,有Jedis、JRedis、JDBC-Redis、RJC等,当然,Jedis是Redis官方首选的Java客户端开发包。
在使用Jedis 2.7.0之前,确保你的Redis服务器版本与其兼容,以避免潜在的问题。 **安装与依赖** 要在项目中使用Jedis,首先需要将`jedis-2.7.0.jar`添加到你的类路径中。如果你使用Maven,可以在`pom.xml`文件中...
总的来说,Jedis是Java开发者与Redis进行交互的标准库,它的高效、易用和全面的功能使得在Java项目中使用Redis变得轻而易举。无论是简单的键值存储,还是复杂的数据库操作,Jedis都能提供有力的支持。通过熟练掌握...
关于Java-redis及其jedis相关学习文档内容,供大家参考使用
对应Maven信息:groupId:redis.clients,artifactId:jedis,version:2.9.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...
jedis5.1.0.jar
在本文中,我们将深入探讨如何在 Spring 应用程序中集成 Redis 数据库,特别是通过使用 Jedis 这个 Java 客户端库。Spring Data Redis 是一个强大的框架,它简化了与 Redis 的交互,而 Jedis 则是连接 Redis 的流行...
在Java中操作Redis,我们通常会借助于一些客户端库,如Jedis、Lettuce等。本示例将重点讲解如何使用Java与Redis进行基本的增删改查操作。 1. **连接Redis** 在Java中,我们需要先导入相应的库,如Jedis,然后创建...
总结来说,Java调用Redis涉及到的关键知识点包括:Jedis客户端的使用,连接和验证,基本的键值操作(如set和get),以及在实际项目中如何扩展到其他数据结构和集群环境。通过这个简单的Demo,开发者可以快速了解和...
综上所述,Jedis是Java开发者与Redis交互的重要工具,熟练掌握其使用方法能够极大地提升开发效率和应用性能。在实际项目中,结合Redis的多种数据结构和Jedis提供的丰富API,可以设计出高效、灵活的解决方案。
`jedis.zip`包含的工具类是为了简化Java程序员与Redis服务器之间的交互,使得操作Redis更加便捷。下面我们将详细探讨这两个关键的类:`JedisTemplate`和`JedisProvider`。 `JedisTemplate`是核心的模板类,它封装了...
搭建Redis环境是使用Jedis的前提。首先,需要从官方源码网站下载最新稳定版的Redis,如文中提及的2.0.4版本,通过`tar`命令解压并进入解压后的目录。接着,执行`make`命令进行编译,成功后会生成`redis-server`服务...
在服务器上安装Redis后,为了使其能够与应用程序无缝集成,我们需要配置XML文件,并创建或使用已有的工具类来调用Redis服务。以下是对这两个方面的详细说明。 **一、Redis配置文件** 在服务器上安装Redis后,默认...
2. **连接Redis**:使用jredis的Jedis或JedisPool类初始化连接,提供Redis服务器的IP地址和端口号。 3. **数据操作**:通过实例化的Jedis对象调用相关方法执行操作,例如`set(key, value)`存储键值对,`get(key)`...
SpringBoot+Redis 执行 Lua 脚本的方法步骤 以下是 SpringBoot+Redis 执行 Lua 脚本的方法步骤的知识点总结: ...使用 Lua 脚本可以实现 Redis 的事务操作,具有原子性、减少网络开销和复用性等优点。