redis
来源:互联网 发布:入骨相思知不知txt 编辑:程序博客网 时间:2024/05/04 04:21
redis安装参考文档:
http://m.blog.csdn.net/blog/dyllove98/9632407
redis的介绍:
http://blog.csdn.net/java2king/article/details/5769738
redis中文API 方法的介绍:http://blog.csdn.net/yczz/article/details/7656910
redis中命令行窗口列出所有key的命令:redis-cli keys '*' //keys和*之间是有一个空格的,一定要注意哦
配置文件:
data-source.xml :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:property-placeholder location="classpath:spring/redis.properties"/>
<context:component-scan base-package="com.bestpay.redis">
</context:component-scan>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive" value="50"/>
<property name="maxIdle" value="8"/>
<property name="maxWait" value="1000"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<!-- <property name="testWhileIdle" value="true"/> -->
</bean>
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" scope="singleton">
<constructor-arg index="0" ref="jedisPoolConfig"/>
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port}"/>
<constructor-arg name="timeout" value="${redis.timeout}"/>
<constructor-arg name="weight" value="1"/>
</bean>
............................... 配置多个redis服务器(保证redis服务的正常提供)
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port}"/>
<constructor-arg name="timeout" value="${redis.timeout}"/>
<constructor-arg name="weight" value="1"/>
</bean>
</list>
</constructor-arg>
</bean>
</beans>
redis.properties:
redis.host=127.0.0.1redis.port=6379redis.pass=foobaredredis.maxIdle=300redis.maxActive=600redis.maxWait=1000redis.testOnBorrow=trueredis.timeout=300package com.bestpay.redis;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Repository;import redis.clients.jedis.ShardedJedis;import java.util.Scanner;/*** redis数据库 memCache key--value值* User: xiechao* Date: 14-4-26* Time: 下午6:27* To change this template use File | Settings | File Templates.*/@Repository("redisClientTemplate")public class RedisClientTemplate {private static final Logger log = LoggerFactory.getLogger(RedisClientTemplate.class);private final static int seconds = 1 * 60; //超时失效时间:5秒钟@Autowiredprivate RedisDataSource redisDataSource;static RedisClientTemplate redisClient = null;static{ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/data-source.xml");redisClient = (RedisClientTemplate)ac.getBean("redisClientTemplate");}public void disconnect() {ShardedJedis shardedJedis = redisDataSource.getRedisClient();shardedJedis.disconnect();}/*** 设置单个值* @param key* @param value* @return*/public String set(String key ,String value){String result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.set(key, value);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/*** 获取单个值** @param key* @return*/public String get(String key) {String result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.get(key);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/*** 在某段时间后实现** @param key* @param seconds* @return*/public Long expire(String key, int seconds) {Long result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.expire(key, seconds);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/*** 判断一个KEY是否存在* @param key* @return*/public boolean exists(String key) {boolean result = false;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return false;}boolean broken = false;try {result = shardedJedis.exists(key);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/*** 获得生存时间* @param key* @return*/public Long ttl(String key) {Long result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.ttl(key);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}public static void main(String[] args) throws Exception {// redisClient.saveValue2Redis("authCodeKey","123456");// System.out.println("5秒钟之前;"+redisClient.1getRedisValue("bbb"));// Thread.sleep(6000);// System.out.println("5秒钟之后;"+redisClient.getRedisValue("bbb"));while(true) {System.out.println("请输入验证码...");Scanner scanner = new Scanner(System.in);String authCode = scanner.nextLine();boolean flg = isLockedCardByAuthCode(authCode,"authCodeKey","6222520119765515");if(flg){log.debug("您的验证码正确,请继续操作后续流程");break;}else{log.debug("您的验证码有问题,或者卡号被锁定");}}}/**** @param key* @param value* @return*/public void saveValue2Redis(String key,String value){redisClient.set(key, value);redisClient.expire(key,seconds);}public void saveValue2Redis(String key,String value,int time ){redisClient.set(key, value);redisClient.expire(key,time);}/**** @param key* @return*/public String getRedisValue(String key) {boolean exists =redisClient.exists(key);if(exists) {//log.debug("key对应的value未失效");return redisClient.get(key);}else{//log.debug("key对应的value已失效");return null;}}/*** 删除key值* @param key*/public Long delKey(String key) {Long result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.del(key);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/**** @param authCode* @return*/public static boolean isLockedCardByAuthCode(String authCode,String authKey,String cardNo){log.debug("输入验证码;{}",authCode);String redisAuthCode = redisClient.getRedisValue(authKey);log.debug("redis验证码;{}",redisAuthCode);if(redisAuthCode==null){log.debug("验证码失效");return false;}//判断此卡是否被锁定了String isExistLockedCard = redisClient.get(cardNo.substring(cardNo.length()-4));if(isExistLockedCard!=null) {log.debug("此卡:{},已经被锁定,请在1分钟之后再做支付操作",cardNo);return false;}if(!redisAuthCode.equals(authCode)) {String cardNoTimes = redisClient.getRedisValue(cardNo);int times = (cardNoTimes==null? 0:Integer.parseInt(redisClient.getRedisValue(cardNo)));if(times != 0) {if(times >= 5) {log.debug("输入验证码错误次数超过5次,当前次数:{}",times+1);log.debug("锁定此卡1分钟,卡号:{}:",cardNo);//用卡号后4位做为存储被锁定卡的keyredisClient.saveValue2Redis(cardNo.substring(cardNo.length()-4),cardNo,1);return false;}log.debug("累计验证码错误次数:{},卡号:{}",String.valueOf(times+1),cardNo);//用卡号做为存储被锁定卡的keyredisClient.saveValue2Redis(cardNo,String.valueOf(times+1));return false;}else{log.debug("首次输入验证码错误,开始次数入库");//用卡号做为存储被锁定卡的keyredisClient.saveValue2Redis(cardNo,"1");return false;}}else{log.debug("验证码正确,通过");redisClient.delKey(cardNo.substring(cardNo.length()-4));redisClient.delKey(cardNo);}return true;}
0 0
- Redis
- redis
- Redis
- redis
- Redis
- redis
- Redis
- redis
- REDIS
- Redis
- Redis
- redis
- Redis
- Redis
- Redis
- Redis
- Redis
- Redis
- android Matrix图片随意的放大缩小,拖动
- insert插入数据怎么让id自增长
- 大数据中:Hadoop云计算以及Nosql与BI商业智能之间的关系
- iOS--- 字符串分割
- 函数的申明
- redis
- STM32之CAN ---CAN ID过滤器分析与设置 CAN_FilterInit
- windows环境变量大全
- PHP 文件处理方法
- 九度OJ 1107:搬水果 (贪心)
- 如何使用CSDN-markdown撰写高质量的博客
- 冒泡排序和选择排序(C实现)
- Jenkins中动态获取git分支(下拉框)
- yii2 gii Forbidden (#403)解决方案