redis的学习知识点

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.1

redis.port=6379

redis.pass=foobared

redis.maxIdle=300

redis.maxActive=600

redis.maxWait=1000

redis.testOnBorrow=true

redis.timeout=300

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;

@Repository("redisClientTemplate")
public class RedisClientTemplate {
private static final Logger log = LoggerFactory.getLogger(RedisClientTemplate.class);
private final static int seconds = 1 * 60; //超时失效时间:5秒钟
@Autowired
private 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 tes(String key) {
Long result = null;
ShardedJedis shardedJedis = redisDataSource.getRedisClient();
if (shardedJedis == null) {
return result;
}
boolean broken = false;
try {
result = shardedJedis.tes(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","1111111111");
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位做为存储被锁定卡的key
redisClient.saveValue2Redis(cardNo.substring(cardNo.length()-4),cardNo,1);
return false;
}
log.debug("累计验证码错误次数:{},卡号:{}",String.valueOf(times+1),cardNo);
//用卡号做为存储被锁定卡的key
redisClient.saveValue2Redis(cardNo,String.valueOf(times+1));
return false;
}else{
log.debug("首次输入验证码错误,开始次数入库");
//用卡号做为存储被锁定卡的key
redisClient.saveValue2Redis(cardNo,"1");
return false;
}
}else{
log.debug("验证码正确,通过");
redisClient.delKey(cardNo.substring(cardNo.length()-4));
redisClient.delKey(cardNo);
}
return true;
}

自我步骤,欢迎拍砖!

时间: 2024-10-29 19:07:44

redis的学习知识点的相关文章

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

算法学习知识点

 ACMer必备知识(这么多呀,慢慢学了-- 图论 路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra)   (可以用 Dijkstra解决问题的特征) 负边权最短路径   Bellman-Ford Bellman-Ford的 Yen-氏优化 差分约束系统 Floyd 广义路径问题   传递闭包 极小极大距离 /极大极小距离 Euler Path / Tour 圈套圈算法 混合图的 EulerPath / Tour  Hamilton Path / Tour 特殊图的

memcache redis 缓存学习笔记

0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 1.redis安装 a.rz redis.gz.tar b.tar解压 c.make编译 d../redis-server &  服务端启动 e.redis-cli 客户端启动 1)notice:注意默认启动 redis-server redis.conf 会报错 , 原因参考redis有三种启动的

深度学习知识点记录

记录深度学习知识点 相关源码:https://coding.net/u/chenxygx/p/FrameworkResearch/git/tree/master/AI 参考: TensorFlow深度学习,一篇文章就够了 TensorFlow.MXNet.PaddlePaddle 对比 TensorFlowSharp入门使用C#编写TensorFlow人工智能应用 &

redis入门学习记录(二)

继第一节 redis入门学习记录(一)之后,我们来学习redis的基本使用. 接下来我们看看/usr/local/redis/bin目录下的几个文件作用是什么? redis-benchmark:redis性能测试工具 redis-check-aof:检查aof日志的工具 redis-check-dump:检查rdb日志的工具 redis-cli:连接用的客户端 redis-server:redis服务进程 1.使用redis的客户端操作 我们现在往redis存储一个key = value  的数

Redis 命令学习

每天不学习点新的东西,感觉就有点会被社会淘汰掉了.也许现在学习的知识会很快忘记,下次学习用到这个知识点的时候,再回来翻记录的笔记,我想这样会比从头再学,效率会高点吧. 闲话不多聊,回归正题.今天学习redis的命令,争取把常用的redis命令都敲一遍. redis命令就是在redi服务上执行的.要想启动redis服务.我是在windows本机上安装的redis.先切换到redis目录 然后启动redis服务. 启动redis redis-cli Redis 键(key) set key conm

redis基本命令学习

看到大家都需要redis,而我工作却没怎么接触过,特来学习,现在先熟悉指令,我通过redis中文的 互动教程(interactive tutorial)来学习的. 1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 通过set key value来存储,通过get key来获取值 set key value:设置key的值,若存在则覆盖setnx key value:SET if Not eXists,若存在则不操作. M

Redis深入学习(1)前言&amp;Redis简介

前言 最近工作上使用到Redis,当然以前也使用过redis,win,linux上都使用过,不系统,不深入,仅是头痛医头,脚痛医脚,这里整理一下自己的笔记,一来方便自己记忆,二来对同行提供借鉴,不足错误之处,请指出,我会看情况修改,哈哈. Redis是什么 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发

mongodb,redis简单学习

2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 1)增删改查 insert方法:dp.person.insert({"name":"jack","age":20}) find方法:db.person.find(): db.person.find({"name":joe}) 1.$type匹配过滤:db.person.find({"na