RedisService

package com.sprucetec.bone.common.redis;

import com.alibaba.fastjson.JSON;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import redis.clients.jedis.Jedis;import redis.clients.util.Pool;

import java.util.ArrayList;import java.util.List;import java.util.Map;

@Servicepublic class RedisService {    @Autowired    private Pool<Jedis> pool;

    public Pool<Jedis> getPool() {        return pool;    }

    /**     * 判断指定key是否存在     *     * @param key key     * @return 如果存在,返回true,否则返回false     */    public boolean exists(final String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.exists(key);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    //删除指定的Keys    public long delete(final String... keys) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.del(keys);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    // 重命名指定的Key,如果参数中的两个Keys的命令相同,    // 或者是源Key不存在,该命令都会返回相关的错误信息。如果newKey已经存在,则直接覆盖。    public String rename(final String oldkey, final String newkey) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.rename(oldkey, newkey);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    // 设置某个key的过期时间(单位:秒),在超过该时间后,Key被自动的删除。    // 如果该Key在超时之前被修改,与该键关联的超时将被移除。    public long expire(final String key, final int seconds) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.expire(key, seconds);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    // #将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1,返回递增后的值。    public long incrBy(final String key, final long integer) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.incrBy(key, integer);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public long incr(final String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.incr(key);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    // #将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为-1,在incr之后其值为1,返回递减后的值。

    public long decrBy(final String key, final long integer) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.decrBy(key, integer);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public long decr(final String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.decr(key);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    @SuppressWarnings("unchecked")    public <T> T getJSONToObject(Class<?> clazz, String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            String value = jedis.get(key);            return (T) JSON.toJavaObject((JSON) JSON.parse(value), clazz);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public String getString(String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.get(key);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    @SuppressWarnings("unchecked")    public <T> List<T> mget(Class<?> clazz, final String... keys) {        List<T> list = new ArrayList<T>();        Jedis jedis = null;        try {            jedis = pool.getResource();            List<String> values = jedis.mget(keys);            for (String value : values) {                list.add((T) JSON.toJavaObject((JSON) JSON.parse(value), clazz));            }            return list;        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public <T> String setObjectToJSON(String key, T value) {        Jedis jedis = null;        try {            jedis = pool.getResource();            String str = JSON.toJSONString(value);            return jedis.set(key, str);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public String set(String key, String value) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.set(key, value);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public <T> String setex(final String key, final int seconds, final T value) {        Jedis jedis = null;        try {            jedis = pool.getResource();            String str = JSON.toJSONString(value);            return jedis.setex(key, seconds, str);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    public <T> String mset(final Map<String, T> map) {        Jedis jedis = null;        try {            jedis = pool.getResource();            String[] keyValues = new String[map.size() * 2];            int i = 0;            for (String key : map.keySet()) {                keyValues[2 * i] = key;                keyValues[2 * i + 1] = JSON.toJSONString(map.get(key));                i++;            }            return jedis.mset(keyValues);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    // #该命令原子性的完成参数中所有key/value的设置操作,    // 如果在这一批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,    // 即所有的修改都不会生效。    public <T> Long msetnx(final Map<String, T> map) {        Jedis jedis = null;        try {            jedis = pool.getResource();            String[] keyValues = new String[map.size() * 2];            int i = 0;            for (String key : map.keySet()) {                keyValues[2 * i] = key;                keyValues[2 * i + 1] = JSON.toJSONString(map.get(key));                i++;            }            return jedis.msetnx(keyValues);        } finally {            if (jedis != null) {                jedis.close();            }        }    }

    /**     * 插入Map类型的某key对应的值     */    public int hset(String key, String field, String value) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.hset(key, field, value).intValue();        } finally {            if (jedis != null)                jedis.close();        }    }

    /**     * 查询Map类型的某key对应的值     */    public String hget(String key, String field) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.hget(key, field);        } finally {            if (jedis != null)                jedis.close();        }    }

    /**     * 查询Map类型的值     */    public Map<String, String> hgetAll(String key) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.hgetAll(key);        } finally {            if (jedis != null)                jedis.close();        }    }

    /**     * 删除hash中的一条记录     */    public long hdel(String hashKey, String taskId) {        Jedis jedis = null;        try {            jedis = pool.getResource();            return jedis.hdel(hashKey, taskId);        } finally {            if (jedis != null)                jedis.close();        }    }

}
时间: 2024-10-16 10:12:59

RedisService的相关文章

微信开发之Author网页授权

微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权! 1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名,值得注意的是这里就是直接写全域名,如: www.liliangel.cn.然而我们开发h5中一般用的是二级域名,如:h5.liliangel.cn 也同样在安全回调域名中. 2.用户级授权

spring redis 整合

<import resource="cache/applicationContext-redis.xml"/> applicationContext-redis.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation

微信JS SDK配置授权,实现分享接口

微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑,后面看到"config:ok"的时候真的算是石头落地,瞬间感觉世界很美好.. 这篇文章是微信开发的很多前置条件,包括了服务端基于JAVA的获取和缓存全局的access_token,获取和缓存全局的jsapi_ticket,以及前端配置授权组件封装,调用分享组件封装. 配置授权思路:首先根据

微信公众号开发前期准备工作

随着移动互联网越来越普及,众多企业都注册了微信公众号,于是微信公众号的开发也越来越多,为了不被世界所淘汰,特地学习下微信公众号的开发,已备不时之需! 按照惯例,学习一门新技术或者新框架,咱们还是从官方提供的文档开始,于是找到微信公众平台开发者文档(http://mp.weixin.qq.com/wiki/home/index.html) 1.微信公众平台接口测试号申请 按照文档指引,咱们得先申请一个微信公众平台接口测试账号(http://mp.weixin.qq.com/debug/cgi-bi

Redis之个人简单理解

1.什么是redis? 在过去的几年中,NoSQL数据库一度成为高并发.海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机.然而在众多产品中能够脱颖而出的却屈指可数,如Redis.MongoDB.BerkeleyDB和CouchDB等.由于每种产品所拥有的特征不同,因此它们的应用场景也存在着一定的差异,下面仅给出简单的说明:      1). BerkeleyDB是一种极为流行的开源嵌入式数据库,在更多情况下可用于存储引擎,比如BerkeleyDB在被Oracle收购之前曾作为

64位Windows下安装Redis教程

这篇文章主要介绍了64位Windows下安装Redis教程,本文使用Microsoft Open Tech group 在 GitHub上开发的一个Win64版本的Redis,需要的朋友可以参考下 Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定.详情请参考:http://redis.io/download 但有时候又想在windows下折腾下Redis,可以从redis下载页面看到如下提示: 复制代码 代码如下: Win64 Unoffi

redis缓存的安装和使用

Redis介绍    Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串).list(列表).sets(集合)或者是ordered  sets(被排序的集合),所有的数据类型都具有push/pop.add/remove.执行服务端的并集.交集.两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力    Redis

[你必须知道的NOSQL系列]专题二:Redis快速入门

一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这里就不想继续介绍了,需要用到的朋友到官方文档进行查阅:http://docs.mongodb.org/manual/tutorial/remove-indexes/.本专题将介绍另一个NoSQL——Redis的相关内容. 二.Redis介绍 关于Redis大家肯定多多少少都有所了解,Redis一般都

redis在asp.net 中的应用

1.redis介绍 Nosql数据库作为关系型数据库的补充,在互联网公司已经得到广泛的运用.redis便是其中的代表之一,redis是一种(key,value)基于内存的数据库,并支持多种数据结构,如List,HashSet,string等,并能够支持的数据的持久化存储,redis如何做内存数据到磁盘的同步将分单独的章节讲解.既然redis是基于内存的数据库,那么它将应用在对性能要求高的场合,如做数据缓存,可以减少数据库访问的压力.同时redis可以应用在统计分析类的Web应用,统计分析类Web