Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP,Java客户端,使用很方便。
Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只 有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影 响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。
Redis 除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局 限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和 scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。
本例子Linux采用的centOs5.4
下面来介绍一下redis的安装
- wget http:
- tar zxvf redis-2.0.4.tar.gz
- cd redis-2.0.4
- make
make完后 redis-2.0.4目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli
安装成功
启动服务
./redis-server
也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动
./redis-server redis.conf
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了
注意启动的时候,会出现
WARNING overcommit_memory is set to 0!Background save may fail under
low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and
[6020] 10 Aug 20:58:21 * The server is nowready to accept connections on port 6379
[6020] 10 Aug 20:58:21 - 0 clientsconnected (0 slaves), 533432 bytes in use
[6020] 10 Aug 20:58:30 - 0 clientsconnected (0 slaves), 533432 bytes in use
由于默认配置是连接到本机的
这时候你要修改配置文件的ip地址连接你服务器啊
还有就是执行:sysctl vm.overcommit_memory=1
然后再启动服务就可以了
关于redis一些资料的学习可以到http://www.cnblogs.com/xhan/archive/2011/02/08/1949867.html去学习 ,很全面
下面介绍一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载
这里给大家提供一个简单的对jedis的封装类以供参考
Redis.java
- package com.ajun.redis;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
-
-
-
-
- public class Redis {
- private static JedisPool pool;
- private static int DBIndex;
- private static String host;
- private static int port=6379;
- private static int timeout=60*1000;
- static {
- DBIndex=Integer.parseInt(PubConstant.getConfigureValue("redis_dbindex"));
- host=PubConstant.getConfigureValue("redis_host");
- JedisPoolConfig config = new JedisPoolConfig();
- config.setMaxActive(100);
- config.setMaxIdle(20);
- config.setMaxWait((long)1000);
- config.setTestOnBorrow(false);
- pool = new JedisPool(config, host, port, timeout);
- }
- public static void addItemToList(String key,byte[] value)
- {
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.connect();
- jedis.select(DBIndex);
- jedis.lpush(key.getBytes(), value);
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- @SuppressWarnings("finally")
- public static List<String> getItemFromList(String key)
- {
- Jedis jedis=null;
-
- List<String> ss=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- long len=jedis.llen(key);
- if(len==0) return null;
- ss = jedis.lrange(key, 0, (int)len);
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- return ss;
- }
- }
- public static void addItem(String key,byte[] value)
- {
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- jedis.set(key.getBytes(), value);
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- public static byte[] getItem(String key)
- {
- Jedis jedis=null;
- byte[] s=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- s = jedis.get(key.getBytes());
- return s;
- } catch (Exception e) {
- e.printStackTrace();
- return s;
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- public static void delItem(String key)
- {
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- jedis.del(key.getBytes());
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- public static long getIncrement(String key)
- {
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- return jedis.incr(key);
- } catch (Exception e) {
- e.printStackTrace();
- return 0L;
- }
- finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
-
-
-
-
-
- public static void setHashMap(String key,HashMap<String,String> map){
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- if(map!=null && !map.isEmpty()){
- for(Map.Entry<String, String> entry : map.entrySet()){
- jedis.hset(key, entry.getKey(), entry.getValue());
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- public static Map<String,String> getHashMap(String key){
- Map<String,String> map = new HashMap<String,String>();
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- map = jedis.hgetAll(key);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- return map;
- }
-
-
-
-
-
- public static void addSet(String key,Set<String> set){
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- if(set!=null && !set.isEmpty()){
- for(String value : set){
-
-
-
-
-
-
-
-
- jedis.sadd(key, value);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- }
- public static Set<String> getSet(String key){
- Set<String> sets = new HashSet<String>();
- Jedis jedis=null;
- try {
- jedis = pool.getResource();
- jedis.select(DBIndex);
- sets = jedis.smembers(key);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- if(jedis!=null)
- pool.returnResource(jedis);
- }
- return sets;
- }
- }
分享到:
相关推荐
与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上。这就意味着一旦我们服务器出现断电、重启之类的情况,我们很可能会出现数据丢失的情况,所以不建议...
1. Redis:内存数据结构存储系统,可用作数据库、缓存和消息中间件,提供高速访问性能。 2. Memcached:轻量级的分布式内存对象缓存系统,适用于缓解数据库压力,提高性能。 五、框架与开发工具 1. Spring Boot:...
3. 多线程:介绍线程的创建和管理,线程同步机制,如synchronized关键字,wait和notify方法,以及线程池的使用。 4. 反射:讨论Java反射机制,它允许程序在运行时访问和修改类的行为,是框架开发中的重要技术。 5....
数据库采用Mysql、TDengine和Redis;设备端支持ESP32、ESP8266、树莓派、合宙等;系统功能• 权限管理: 用户管理、部门管理、岗位管理、菜单管理、角色管理、字典和参数管理等• 系统监控: 操作日志、登录日志、...
Vert.x除了异步之外,还提供了非常多的吸引人的技术,比如EventBus,通过EventBus可以非常简单的实现分布式消息,进而为分布式系统调用,微服务奠定基础。除此之外,还提供了对多种客户端的支持,比如Redis,...
Seata的高可用模式是通过TC使用db模式共享全局事务会话信息,使用非file的seata支持的第三方注册中心和配置中心来共享全局配置的方式来实现的。 Seata支持的第三方注册中心有nacos 、eureka、redis、zk、consul、...
SpringBootLearn Spring Boot教程 转载请标明出处: 原文首发于: 本文出自李浩东...SpringBoot详细教程 | 第九篇:Spring Boot整合Redis简单实现消息队列 SpringBoot详细教程 | 第十篇:Spring Boot整合RabbitMQ 邮箱
目的很简单,写这些文章,以及整个github的资料,都是为了面试而准备的,只希望能够给面试提供一些帮助,都能够进大厂最好了。 关于转载 如果你需要转载本仓库的一些文章到自己的博客的话,记得注明原文地址就可以了...
商业转载请联系作者获得授权,非商业转载请注明出处。 碰巧读过之前大家提到的一些开源项目 网络编程: redis是单线程异步网络编程的范例: nginx是多进程网络编程的巅峰,模块化: memcached虽然是C++,但是C style的...
转载须知 :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!:fuel_pump: Sponsor Java 基础 ...
:thumbs_up:推荐(Github访问速度比较慢可能会导致部分图片无法刷新出来) :thumbs_up:推荐一些闲话:简介:关于JavaGuide的相关介绍:。PDF版本: 。 PDF版本: 。面试专版:准备面试的小伙伴可以考虑面试专版: ,...