随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用memcache去做数据缓存,现在众所周知主流的缓存技术已经换成redis了,说实话,没有对比就没有伤害,用过redis的人肯定不再希望去用memcache了,举个最简单的例子,对hash的存储以及提供的各种函数,真的是让memcache望尘莫及啊,好了,废话不多说,直接上干货。

一、安装redis

windows版安装:

1.下载redis:https://github.com/ServiceStack/redis-windows/raw/master/downloads/redis-latest.zip

2.解压后随便找个盘符放进去,例如:解压到C盘了,C:\redis

3.打开命令行,直接敲命令:

cd c:\redis
redis-server.exe redis.windows.conf

如果你弹出下面的页面,那么恭喜你已经成功了。

注意:如果你只是想本机玩玩 那么现在就可以了,如果想通过外网来去访问,则需要去修改配置文件redis.windows.conf,具体修改什么我会在linux版本配置当中贴出来。

linux版安装:

1.下载redis:https://redis.io/download 找个稳定的版本下载下来

2.直接执行下面的命令

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make

注意:$不是命令

3.启动服务

进入src的目录下

[root@localhost src]# ./redis-server ../redis.conf 

4.关闭服务

[root@localhost src]# ps -ef|grep redis
root 9492 1 0 09:39 ? 00:00:00 ./redis-server *:6379
root 9605 8310 0 09:48 pts/1 00:00:00 grep --color=auto redis
[root@localhost src]# kill -9 9492

5.设置外网访问

修改redis.conf文件

将bind 127.0.0.1 注释掉  改成# bind 127.0.0.1

将daemonize no  改成daemonize yes          ps:将redis-service设置为后台服务

将protected-mode  yes 改成 protected-mode no     ps:将redis的保护模式去掉,否则在这种模式下连接只接受从环回接口,也就是只能单机玩,windows版安装也一样

6.配置防火墙,开放6379端口

iptables -I IN_public_allow 4 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

注意:IN_public_allow为自己服务器的中的组,一般为input。

二、客户端调用代码

package cfs.wsdl.cache;

import java.util.Map;
import java.util.UUID; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;
import cfs.core.util.Util; public class RedisCacheUtil {
private static final String TOKENS="tokens";
private static String ip=Util.getString("redis", "redis.ip");
private static String port=Util.getString("redis", "redis.port");
private static String maxActive=Util.getString("redis", "jedis.pool.maxActive");
private static String maxIdle=Util.getString("redis", "jedis.pool.maxIdle");
private static String maxWaitMillis=Util.getString("redis", "jedis.pool.maxWait");
private static String testOnBorrow=Util.getString("redis", "jedis.pool.testOnBorrow");
private static String testOnReturn=Util.getString("redis", "jedis.pool.testOnReturn"); //声明连接池对象
private static JedisPoolConfig config;
//声明连接管道对象
private static JedisPool pool;
//声明主从切换管道对象
private static JedisSentinelPool sentinelpool;
//声明redis操作对象
private static Jedis jedis; //获取连接池对象
private static JedisPoolConfig getPoolConfig(){
if(config == null){
config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(Integer.valueOf(maxActive));
//最大空闲连接数
config.setMaxIdle(Integer.valueOf(maxIdle));
//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
config.setMaxWaitMillis(Long.valueOf(maxWaitMillis));
//在获取连接的时候检查有效性, 默认false
config.setTestOnBorrow(Boolean.valueOf(testOnBorrow));
//在获取返回结果的时候检查有效性, 默认false
config.setTestOnReturn(Boolean.valueOf(testOnReturn)); }
return config;
} /**
* 得到普通连接池的连接管道.
*
* @Title: getPool
* @author lmoran@163.com
* @return
*/
private static synchronized JedisPool getPool(){
if(pool == null){
//初始化连接池
pool = new JedisPool(getPoolConfig(), ip,Integer.valueOf(port));
}
return pool;
} /**
* 获取一个redis操作对象.
*
* @Title: getJedis
* @author lmoran@163.com
* @return
*/
private static synchronized Jedis getJedis(){
if(jedis==null){
jedis =RedisCacheUtil.getPool().getResource();
}
return jedis;
} /**
* 获取token.
*
* @Title: getToken
* @author lmoran@163.com
* @param user_id 用户id
* @return token
*/
public static String getToken(String user_id){
String token="";
Jedis jedis =getJedis();
boolean bool=jedis.hexists(TOKENS, user_id);
if(bool){
token=jedis.hget(TOKENS, user_id);
}else{
token=UUID.randomUUID().toString().replaceAll("-", "");
jedis.hset(TOKENS, user_id, token);
}
return token;
} public static void main(String[] args) {
Jedis jedis =RedisCacheUtil.getPool().getResource();
jedis.hdel("tokens", "aaa");
System.out.println(getToken("aaa")); }
}

RedisCacheUtil

/**
* 获取指定资源*.properites里的数据..
*
* @Title: getString
* @author lmoran@163.com
* @param res
* 资源名称例如 jdbc.properites,传参时就传jdbc
* @param key
* 要获取的key
* @return 返回对应的value
*/
public static String getString(String res, String key) {
String propertyFileName = res;
ResourceBundle resourceBundle = ResourceBundle
.getBundle(propertyFileName);
if (key == null || key.equals("") || key.equals("null")) {
return "";
}
String result = "";
try {
result = resourceBundle.getString(key);
} catch (MissingResourceException e) {
e.printStackTrace();
}
return result;
}

Util类中的getString方法

#redis服务器ip #
redis.ip= 192.168.1.66
#redis服务器端口号#
redis.port=6379
###jedis##pool##config###
#jedis的最大分配对象#
jedis.pool.maxActive=10
#jedis最大保存idel状态对象数 #
jedis.pool.maxIdle=200
#jedis池没有对象返回时,最大等待时间 #
jedis.pool.maxWait=1000
#jedis调用borrowObject方法时,是否进行有效检查#
jedis.pool.testOnBorrow=false
#jedis调用returnObject方法时,是否进行有效检查 #
jedis.pool.testOnReturn=true

redis.properties

分分钟搞定redis的更多相关文章

  1. 分分钟搞定Redis编译安装

    1.  依赖包安装 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc- ...

  2. 【原型实战】分分钟搞定Unsplash网站原型设计

    网站原型设计是我们在设计网页过程中必不可少的一步,激烈的市场竞争让我们不得不对产品进行快速迭代,如何高速有效的进行原型设计成为了设计师头疼的问题.本文将以unsplash网站为实例,教大家快速搞定we ...

  3. 分分钟搞定IOS远程消息推送

    一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...

  4. 几分钟搞定redis存储session共享——设计实现

    前面我们写过C#在redis中存储常用的5种数据类型demo,没看过的可以点击电梯直达:https://www.cnblogs.com/xiongze520/p/10267804.html 我们上一篇 ...

  5. 一篇博客搞定redis基础

    redis简介 redis 一款高性能key-value数据库,实际上多用作缓存队列或者消息分发(celery),但是最常常被用来做缓存. redis安装 源码安装 $ wget http://dow ...

  6. 使用python来搞定redis的订阅功能

    好久没写博客了.   最近公司开了新项目,我负责的内容之一是系统的后端.具体项目内容我就不介绍了,但是用到的技术有些还是很有趣的,值得记录一下.今天介绍的就是其中一个:利用redis的pubsub订阅 ...

  7. Redis-用思维导图二天搞定Redis用法。

    Redis整体面貌 Redis基本数据结构 1.String 1.1 数据结构 long len byte数组长度 long free 可用数组长度 char buff[] 数据内容 1.2 命令 键 ...

  8. 一文搞定 Redis 复制(全会的举个手看看)

    阅读本文大概需要 5 分钟. 本文大纲 复制过程 数据间的同步 全量复制 部分复制 心跳 异步复制 总结 一.复制过程 Step 1:从节点执行 slaveof 命令. Step 2:从节点只是保存了 ...

  9. 搞定redis面试--Redis的过期策略?手写一个LRU?

    1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...

随机推荐

  1. WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).

    WIN7系统 64位出现  Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).请安装 Microsoft Data Acces ...

  2. 创建一个dynamics 365 CRM online plugin (十二) - Asynchronous Plugins

    这篇是plugin的终结. 通过之前的11期我们应该发现了plugin其实学习起来不难. async plugin 是把plugin的功能async run起来. e.g.  我们之前做过的preOp ...

  3. 字符ASCII转换

    实现效果: 关键知识: 实现代码: private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != stri ...

  4. Hashtable详细介绍(源码解析)和使用示例

    第1部分 Hashtable介绍 Hashtable 简介 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. Hashtable 继承于Dic ...

  5. maven学习记录四——私服 nexus

    8       私服 nexus 安装nexus 启动服务 启动失败的解决方法: 登录nexus 用户名/密码  admin/admin123 仓库类型 Virtual   虚拟仓库 Proxy  代 ...

  6. 运行出现Server Tomcat v8.5 Server at localhost failed to start.和A child container failed during start

    出现问题: 解决方法: 1.看servlet文件中的@WebServlet“()”,里面是否少了/字符,如图: 加上即可,有问题随时留言,欢迎您的咨询!

  7. 【洛谷P2470】[SCOI2007]压缩

    压缩 #include<iostream> #include<cstring> #include<cstdio> using namespace std; #def ...

  8. 【luogu P3384 树链剖分】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3384 诶又给自己留了个坑..不想写线段树一大理由之前的模板变量名太长 #include <cstdio ...

  9. 【luogu P2299 Mzc和体委的争夺战】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2299#sub 裸的迪杰斯特拉(我是在考试前复习一下板子) #include<iostream> ...

  10. 匿名union

    #include <stdio.h> enum node_type{    t_int,t_double}; struct node{    enum node_type type;   ...