redis工具类


import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtils {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;


    /**
     * 将参数中的字符串值设置为键的值,不设置过期时间
     * @param key
     * @param value 必须要实现 Serializable 接口
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 将参数中的字符串值设置为键的值,设置过期时间
     * @param key
     * @param value 必须要实现 Serializable 接口
     * @param timeout
     */
    public void set(String key, Object value, Long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    /**
     * 获取与指定键相关的值
     * @param key
     * @return
     */
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 设置某个键的过期时间
     * @param key 键值
     * @param ttl 过期秒数
     */
    public boolean expire(String key, Long ttl) {
        return redisTemplate.expire(key, ttl, TimeUnit.SECONDS);
    }

    /**
     * 判断某个键是否存在
     * @param key 键值
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 向集合添加元素
     * @param key
     * @param value
     * @return 返回值为设置成功的value数
     */
    public Long sAdd(String key, String... value) {
        return redisTemplate.opsForSet().add(key, value);
    }

    /**
     * 获取集合中的某个元素
     * @param key
     * @return 返回值为redis中键值为key的value的Set集合
     */
    public  Set<Object> sGetMembers(String key) {
        return redisTemplate.opsForSet().members(key);
    }

    /**
     * 将给定分数的指定成员添加到键中存储的排序集合中
     * @param key
     * @param value
     * @param score
     * @return
     */
    public Boolean zAdd(String key, String value, double score) {
        return redisTemplate.opsForZSet().add(key, value, score);
    }

    /**
     * 返回指定排序集中给定成员的分数
     * @param key
     * @param value
     * @return
     */
    public Double zScore(String key, String value) {
        return redisTemplate.opsForZSet().score(key, value);
    }

    public Long setList(String key, String value){
        return redisTemplate.opsForList().leftPush(key,value);
    }

    public List<?> getList(String key){
        return redisTemplate.opsForList().range(key,0,-1);
    }

    /**
     * 删除指定的键
     * @param key
     * @return
     */
    public Boolean delete(String key) {
        return redisTemplate.delete(key);
    }

    /**
     * 删除多个键
     * @param keys
     * @return
     */
    public Long delete(Collection<String> keys) {
        return redisTemplate.delete(keys);
    }

    /**
     * 模糊删除key
     * @param suffix
     */
    public  void  deleteBySuffix(String suffix ) {
        //String suffix = "R20180903001735213045";
        Set<String> keys = redisTemplate.keys(suffix+"*");
        for (String str : keys) {
            System.out.print("key的值"+str + " ");
        }
        redisTemplate.delete(keys);
    };

    public  List<Object>  selectBySuffix(String suffix ) {
        //String suffix = "R20180903001735213045";
        List<Object> list  = new ArrayList<Object>();
        Set<String> keys = redisTemplate.keys(suffix+"*");
        for (String str : keys) {
            //System.out.print("key的值"+str + " ");
            list.add(get(str));
        }
        return list;
    };

    /**
     * 搜索模糊key
     * @param suffix
     * @return
     */
    public  List<String>  selectBySuffixToKey(String suffix ) {
        List<String> list  = new ArrayList<String>();
        Set<String> keys = redisTemplate.keys(suffix+"*");
        for (String str : keys) {
            list.add(str);
        }
        return list;
    };

    /**
     * 添加坐标
     * **/
    public void cacheGeo(String key, Double x, Double y, String member) {
        GeoOperations<String, Object> geoOps = redisTemplate.opsForGeo();
        geoOps.add(key, new Point(x, y) , member);
    }

    /**
     * 删除坐标
     * **/
    public void removeGeo(String key, String...members) {
        GeoOperations<String, Object> geoOps = redisTemplate.opsForGeo();
        geoOps.remove(key, members);
    }

    /**
     * 比较2个坐标距离
     * **/
    public Distance distanceGeo(String key, String member1, String member2) {
        GeoOperations<String, Object> geoOps = redisTemplate.opsForGeo();
        return geoOps.distance(key, member1, member2);
    }

    /**
     * 获取坐标
     * **/
    public List<Point> positionGeo(String key, String... members){
        GeoOperations<String, Object> geoOps = redisTemplate.opsForGeo();
        return geoOps.position(key, members);
    }

}
原文地址:https://www.cnblogs.com/qq376324789/p/13703860.html