分分钟搞定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怎么经常会丢掉一些数据?写进去了 ...
随机推荐
- 使用Sleep方法延迟时间
实现效果: 关键知识:(线程的定义) 实现代码: private void Form1_Load(object sender, EventArgs e) { Thread show = new Thr ...
- Pod常使用命令
pod 命令汇总 # 创建默认的 Podfile $ pod init # 第一次使用安装框架 $ pod install # 安装框架,不更新本地索引,速度快 $ pod install --no- ...
- 在react中实现CSS模块化
react中使用普通的css样式表会造成作用域的冲突,css定义的样式的作用域是全局,在Vue 中我们还可以使用scope来定义作用域,但是在react中并没有指令一说,所以只能另辟蹊径了.下面我将简 ...
- axios基础用法
概述: 1.axios:一个基于Promise用于浏览器和nodejs的HTTP客户端.本质是对ajax的封装. 特征: 1>从浏览器中创建XMLHttpRequest 2>从node.j ...
- tidb损坏tikv节点怎么恢复集群
tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete store_id .数据一般可以正常访问,但是如 ...
- Linux-history的用法
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...] history的作用是显示或操纵历史 ...
- http状态码(status_codes)
首先:1XX 接受的请求正在处理,2XX请求正常处理完毕,3XX需要进行附加操作以完成请求(重定向?),4XX服务器无法处理请求(也就是客户端请求错误),5XX服务器处理请求出错. 当然不仅仅是一张图 ...
- 强化记忆之php
php 输出的区分 新手摸索道路,有说不对的地方,还请多多包涵. echo 能够输出一个以上的字符串,也能输出html标签 print 一次只能接受一个字符串(区分与echo),也能输出html标签 ...
- HDSF读写文件
HDFS 读取文件 HDFS的文件读取原理,主要包括以下几个步骤: 1.首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的 实例. 2.D ...
- Linux基础(04)、功能配置(调整防火墙、静态IP、环境变量)
目录 一.centos防火墙 二.VMware网络连接方式 2.1.连接方式:桥接.NAT.仅主机 2.2.常见问题 三.centos配置静态IP 四.环境变量 4.1.什么是环境变量 4.2.临时修 ...