随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用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. 【[ZJOI2014]力】

    题目 好神仙啊 \[F_{j}=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{j<i}\frac{q_iq_j}{(i-j)^2}\] 求\(\frac{F ...

  2. 课堂笔记-------字符串类型string------练习

    字符串类型 一.string //打出s.时就会出现一堆的方框,要找不带箭头的(不带箭头的是我们现在可以用的到的),不要找带箭头的(带箭头的是扩展,现在还用不到) //不带箭头的都是对s的操作(动作和 ...

  3. VMWARE下CentOS7虚拟机网络配置

    注:本文仅针对新装的虚拟机,#ip addr 获取不到ip信息,无法连接网络的情况提供一种参考解决方案. 1.左上角点击“编辑”->“虚拟网络编辑器”.新建一个NAT模式的网络. 2.配置虚拟机 ...

  4. sublime3插件安装方法

    sublime3插件安装方法:http://blog.csdn.net/u011627980/article/details/52171886

  5. java循环作业0912

    题目一:一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)? double a = 0.08; double h =0; int i=0; for(i=1;h&l ...

  6. JVM垃圾回收补充知识点

    1. 分代 虚拟机中的共划分为三个代: 年轻代(Young Gen):eden和survivor-8:1:1 年老代(Old Gen):存储大对象,由survivor晋升 永久代(perm Gen): ...

  7. java之递归学习

    递归思想(2018-10-22): 递归就是方法里调用自身 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口 递归算法代码显得很简洁,但递归算法解题的运行效率较低.所以不提倡用递归设计程序 ...

  8. iOS之一些实用的Demo

    图像浏览及处理 FLAnimatedImage - gif播放处理的工具. CLImageEditor - 超强的图片编辑库,快速帮你实现旋转,防缩,滤镜等等一系列麻烦的事情. ios-image-f ...

  9. Vue组件通讯黑科技

    Vue组件通讯 组件可谓是 Vue框架的最有特色之一, 可以将一大块拆分为小零件最后组装起来.这样的好处易于维护.扩展和复用等. 提到 Vue的组件, 相必大家对Vue组件之间的数据流并不陌生.最常规 ...

  10. Aaliyun Linux 64 安装jdk+mysql+tomcat

    参考: http://www.blogjava.net/amigoxie/archive/2013/02/22/395605.html http://bbs.aliyun.com/read/17704 ...