分分钟搞定redis
随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用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的更多相关文章
- 分分钟搞定Redis编译安装
1. 依赖包安装 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc- ...
- 【原型实战】分分钟搞定Unsplash网站原型设计
网站原型设计是我们在设计网页过程中必不可少的一步,激烈的市场竞争让我们不得不对产品进行快速迭代,如何高速有效的进行原型设计成为了设计师头疼的问题.本文将以unsplash网站为实例,教大家快速搞定we ...
- 分分钟搞定IOS远程消息推送
一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...
- 几分钟搞定redis存储session共享——设计实现
前面我们写过C#在redis中存储常用的5种数据类型demo,没看过的可以点击电梯直达:https://www.cnblogs.com/xiongze520/p/10267804.html 我们上一篇 ...
- 一篇博客搞定redis基础
redis简介 redis 一款高性能key-value数据库,实际上多用作缓存队列或者消息分发(celery),但是最常常被用来做缓存. redis安装 源码安装 $ wget http://dow ...
- 使用python来搞定redis的订阅功能
好久没写博客了. 最近公司开了新项目,我负责的内容之一是系统的后端.具体项目内容我就不介绍了,但是用到的技术有些还是很有趣的,值得记录一下.今天介绍的就是其中一个:利用redis的pubsub订阅 ...
- Redis-用思维导图二天搞定Redis用法。
Redis整体面貌 Redis基本数据结构 1.String 1.1 数据结构 long len byte数组长度 long free 可用数组长度 char buff[] 数据内容 1.2 命令 键 ...
- 一文搞定 Redis 复制(全会的举个手看看)
阅读本文大概需要 5 分钟. 本文大纲 复制过程 数据间的同步 全量复制 部分复制 心跳 异步复制 总结 一.复制过程 Step 1:从节点执行 slaveof 命令. Step 2:从节点只是保存了 ...
- 搞定redis面试--Redis的过期策略?手写一个LRU?
1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...
随机推荐
- 在idea配置jetty和创建(包、文件)javaWeb以及Servlet简单实现
在创建之前要安装好jetty jetty官网链接:https://jettylife.com/ 现在进行创建项目: 需要按照好jdk 现在进行添加jetty 现在进行配置 完成后ok ok 下面警告的 ...
- React Native 中组件的生命周期(转)
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- Spring知识点小结(一)
一.Spring的简介 1.spring是一个full-stack轻量级开源框架 2.spring的两大核心 IoC: inverse of control 控制反转:反转是对象 ...
- Webpack4 学习笔记八 开发环境和生产环境配置
webpack resolve属性 webpack 区分开发环境和生产环境 webpack resolve属性 该选项的作用是设置模块如何被解析. resolve.alias: 设置别名, 在vue中 ...
- Ionic的项目结构(angluar js)
Hybird HTML5 App(移动应用开发)之3.Ionic的项目结构 前面使用命令ionic start myapp下载了默认的Ionic应用程序,下面我们打开应用程序项目,来分析一下Ionic ...
- 表单转换为JSON
$.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each(a, function ( ...
- display:flex 布局之 骰子
代码部分 html <body> <div class="box"> <div class="a a1"> <span ...
- Java OOP——第三章 多态
1.多态:(polymorphism): 是具有表现多种形态能力的特征: (专业化的说法:)同一个实现接口(引用类型),使用不同的实例而执行不同的操作 指一个引用(类型)在不同情况下的多种状态.也可以 ...
- libpng的使用
zlib 适用于数据压缩的函式库,由Jean-loup Gailly (负责compression)和 Mark Adler (负责decompression)开发. zlib被设计成一个免费的.通用 ...
- Python正则表达式-基础
Python正则表达式-基础 本文转载自昔日暖阳,原文地址:http://www.osheep.cn/4806.html python使用正则,需要先引入re模块 import re 匹配符 单个字符 ...