当前位置: 代码网 > it编程>数据库>Redis > 关于RedisTemplate常用方法封装

关于RedisTemplate常用方法封装

2024年12月10日 Redis 我要评论
redistemplate常用方法封装1. 序列化和配置package com.xxx.redis; import com.fasterxml.jackson.annotation.jsonautod

redistemplate常用方法封装

1. 序列化和配置

package com.xxx.redis;
 
import com.fasterxml.jackson.annotation.jsonautodetect;
import com.fasterxml.jackson.annotation.propertyaccessor;
import com.fasterxml.jackson.databind.objectmapper;
import com.fasterxml.jackson.databind.jsontype.impl.laissezfairesubtypevalidator;
import com.xxx.redis.service.redisservice;
import com.xxx.redis.service.impl.defaultredisserviceimpl;
import org.springframework.boot.autoconfigure.data.redis.redisautoconfiguration;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.connection.redisconnectionfactory;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.serializer.jackson2jsonredisserializer;
import org.springframework.data.redis.serializer.redisserializer;
 
/**
 * redisconfiguration 
 *
 * @author xm.z
 */
@configuration
public class redisconfiguration {
 
	@bean
	public redisserializer<object> redisserializer() {
		// 创建 json 序列化器
		jackson2jsonredisserializer<object> serializer = new jackson2jsonredisserializer<>(object.class);
		objectmapper objectmapper = new objectmapper();
		objectmapper.setvisibility(propertyaccessor.all, jsonautodetect.visibility.any);
		// 必须设置 否则无法将json转化为对象 会转化成map类型
		objectmapper.activatedefaulttyping(laissezfairesubtypevalidator.instance, objectmapper.defaulttyping.non_final);
		serializer.setobjectmapper(objectmapper);
		return serializer;
	}
 
	@bean
	public redistemplate<string, object> redistemplate(redisconnectionfactory redisconnectionfactory,
			redisserializer<object> redisserializer) {
		redistemplate<string, object> redistemplate = new redistemplate<>();
		redistemplate.setconnectionfactory(redisconnectionfactory);
		redistemplate.setkeyserializer(redisserializer.string());
		redistemplate.setvalueserializer(redisserializer);
		redistemplate.sethashkeyserializer(redisserializer.string());
		redistemplate.sethashvalueserializer(redisserializer);
		redistemplate.afterpropertiesset();
		return redistemplate;
	}
 
	@bean
	public redisservice redisservice(redistemplate<string, object> redistemplate) {
		return new defaultredisserviceimpl(redistemplate);
	}
 
}

2. 基础常量

package com.xxx.redis.constant;
 
import org.springframework.data.redis.core.script.defaultredisscript;
 
/**
 * redisconstants
 *
 * @author xm.z
 */
public final class redisconstants {
 
	/**
	 * 递增并设置过期时间的 lua 脚本
	 */
	public static final defaultredisscript<long> incr_by_expire_lua_script = new defaultredisscript<>(
			"local r = redis.call('incrby', keys[1], argv[1]) redis.call('expire', keys[1], argv[2]) return r",
			long.class);
 
	/**
	 * 递减并设置过期时间的 lua 脚本
	 */
	public static final defaultredisscript<long> decr_by_expire_lua_script = new defaultredisscript<>(
			"local r = redis.call('decrby', keys[1], argv[1]) redis.call('expire', keys[1], argv[2]) return r",
			long.class);
 
	private redisconstants() {
	}
 
}

3. 接口及实现

package com.xxx.redis.service.impl;
 
import com.xxx.redis.service.redisservice;
import lombok.extern.slf4j.slf4j;
import org.springframework.data.redis.core.*;
 
/**
 * abstractredisservice
 *
 * @author xm.z
 */
@slf4j
public abstract class abstractredisservice implements redisservice {
 
	/**
	 * get helper class that simplifies redis data access code.
	 * @return redistemplate 获取
	 */
	protected abstract redistemplate<string, object> gettemplate();
 
	public hashoperations<string, object, object> hashops() {
		return this.gettemplate().opsforhash();
	}
 
	public valueoperations<string, object> valueops() {
		return this.gettemplate().opsforvalue();
	}
 
	public listoperations<string, object> listops() {
		return this.gettemplate().opsforlist();
	}
 
	public setoperations<string, object> setops() {
		return this.gettemplate().opsforset();
	}
 
	public zsetoperations<string, object> zsetops() {
		return this.gettemplate().opsforzset();
	}
 
	public streamoperations<string, object, object> streamops() {
		return this.gettemplate().opsforstream();
	}
 
	public geooperations<string, object> geoops() {
		return this.gettemplate().opsforgeo();
	}
 
}
package com.xxx.redis.service;
 
import org.springframework.data.domain.sort;
import org.springframework.data.geo.distance;
import org.springframework.data.geo.georesults;
import org.springframework.data.geo.point;
import org.springframework.data.redis.connection.redisgeocommands;
 
import java.util.collection;
import java.util.list;
import java.util.map;
import java.util.set;
 
/**
 * redis 服务
 *
 * @author xm.z
 */
public interface redisservice {
 
	/**
	 * 获取所有符合指定表达式的 key
	 * @param pattern 表达式
	 * @return java.util.set
	 * @see <a href="http://redis.io/commands/keys" rel="external nofollow"  rel="external nofollow" >keys command</a>
	 */
	set<string> keys(string pattern);
 
	/**
	 * 保存属性
	 * @param key key值
	 * @param value value值
	 * @param time 时间戳
	 */
	void set(string key, object value, long time);
 
	/**
	 * 保存属性
	 * @param key key值
	 * @param value value值
	 */
	void set(string key, object value);
 
	/**
	 * 获取属性
	 * @param key key值
	 * @return 返回对象
	 */
	object get(string key);
 
	/**
	 * 从指定的 keys 批量获取属性
	 * @param keys keys
	 * @return values list,当值为空时,该 key 对应的 value 为 null
	 * @see <a href="http://redis.io/commands/mget" rel="external nofollow"  rel="external nofollow" >mget command</a>
	 */
	list<object> mget(collection<string> keys);
 
	/**
	 * 批量获取 keys 的属性,并返回一个 map
	 * @param keys keys
	 * @return map,key 和 value 的键值对集合,当 value 获取为 null 时,不存入此 map
	 */
	map<string, object> mgettomap(collection<string> keys);
 
	/**
	 * 删除属性
	 * @param key key值
	 * @return 返回成功
	 */
	boolean del(string key);
 
	/**
	 * 批量删除属性
	 * @param keys key值集合
	 * @return 返回删除数量
	 */
	long del(collection<string> keys);
 
	/**
	 * 设置过期时间
	 * @param key key值
	 * @param time 时间戳
	 * @return 返回成功
	 */
	boolean expire(string key, long time);
 
	/**
	 * 获取过期时间
	 * @param key key值
	 * @return 返回时间戳
	 */
	long getexpire(string key);
 
	/**
	 * 判断key是否存在
	 * @param key key值
	 * @return 返回
	 */
	boolean haskey(string key);
 
	/**
	 * 按delta递增
	 * @param key key值
	 * @param delta delta值
	 * @return 返回递增后结果
	 */
	long incr(string key, long delta);
 
	/**
	 * 按delta递增并设置过期时间
	 * @param key key值
	 * @param delta delta值
	 * @param timeout 过期时间(单位:秒)
	 * @return 返回递增后结果
	 */
	long incrandexpire(string key, long delta, long timeout);
 
	/**
	 * 按delta递减
	 * @param key key值
	 * @param delta delta值
	 * @return 返回递减后结果
	 */
	long decr(string key, long delta);
 
	/**
	 * 按delta递减并设置过期时间
	 * @param key key值
	 * @param delta delta值
	 * @param timeout 过期时间(单位:秒)
	 * @return 返回递减后结果
	 */
	long decrandexpire(string key, long delta, long timeout);
 
	/**
	 * 获取hash结构中的属性
	 * @param key 外部key值
	 * @param hashkey 内部key值
	 * @return 返回内部key的value
	 */
	object hget(string key, string hashkey);
 
	/**
	 * 向hash结构中放入一个属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param value 内部key的value
	 * @param time 过期时间
	 * @return 返回是否成功
	 */
	boolean hset(string key, string hashkey, object value, long time);
 
	/**
	 * 向hash结构中放入一个属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param value 内部key的value
	 */
	void hset(string key, string hashkey, object value);
 
	/**
	 * 直接获取整个hash结构
	 * @param key 外部key值
	 * @return 返回hashmap
	 */
	map<object, object> hgetall(string key);
 
	/**
	 * 直接设置整个hash结构
	 * @param key 外部key
	 * @param map hashmap值
	 * @param time 过期时间
	 * @return 返回是否成功
	 */
	boolean hsetall(string key, map<string, object> map, long time);
 
	/**
	 * 直接设置整个hash结构
	 * @param key 外部key
	 * @param map hashmap值
	 */
	void hsetall(string key, map<string, ?> map);
 
	/**
	 * 删除hash结构中的属性
	 * @param key 外部key值
	 * @param hashkey 内部key值
	 */
	void hdel(string key, object... hashkey);
 
	/**
	 * 判断hash结构中是否有该属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @return 返回是否存在
	 */
	boolean hhaskey(string key, string hashkey);
 
	/**
	 * hash结构中属性递增
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param delta 递增条件
	 * @return 返回递增后的数据
	 */
	long hincr(string key, string hashkey, long delta);
 
	/**
	 * hash结构中属性递减
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param delta 递增条件
	 * @return 返回递减后的数据
	 */
	long hdecr(string key, string hashkey, long delta);
 
	/**
	 * 获取set结构
	 * @param key key
	 * @return 返回set集合
	 */
	set<object> smembers(string key);
 
	/**
	 * 向set结构中添加属性
	 * @param key key
	 * @param values value集
	 * @return 返回增加数量
	 */
	long sadd(string key, object... values);
 
	/**
	 * 向set结构中添加属性
	 * @param key key
	 * @param time 过期时间
	 * @param values 值集合
	 * @return 返回添加的数量
	 */
	long sadd(string key, long time, object... values);
 
	/**
	 * 是否为set中的属性
	 * @param key key
	 * @param value value
	 * @return 返回是否存在
	 */
	boolean sismember(string key, object value);
 
	/**
	 * 获取set结构的长度
	 * @param key key
	 * @return 返回长度
	 */
	long ssize(string key);
 
	/**
	 * 删除set结构中的属性
	 * @param key key
	 * @param values value集合
	 * @return 删除掉的数据量
	 */
	long sremove(string key, object... values);
 
	/**
	 * 获取list结构中的属性
	 * @param key key
	 * @param start 开始
	 * @param end 结束
	 * @return 返回查询的集合
	 */
	list<object> lrange(string key, long start, long end);
 
	/**
	 * 获取list结构的长度
	 * @param key key
	 * @return 长度
	 */
	long lsize(string key);
 
	/**
	 * 根据索引获取list中的属性
	 * @param key key
	 * @param index 索引
	 * @return 对象
	 */
	object lindex(string key, long index);
 
	/**
	 * 向list结构中添加属性
	 * @param key key
	 * @param value value
	 * @return 增加后的长度
	 */
	long lpush(string key, object value);
 
	/**
	 * 向list结构中添加属性
	 * @param key key
	 * @param value value
	 * @param time 过期时间
	 * @return 增加后的长度
	 */
	long lpush(string key, object value, long time);
 
	/**
	 * 向list结构中批量添加属性
	 * @param key key
	 * @param values value 集合
	 * @return 增加后的长度
	 */
	long lpushall(string key, object... values);
 
	/**
	 * 向list结构中批量添加属性
	 * @param key key
	 * @param time 过期时间
	 * @param values value集合
	 * @return 增加后的长度
	 */
	long lpushall(string key, long time, object... values);
 
	/**
	 * 从list结构中移除属性
	 * @param key key
	 * @param count 总量
	 * @param value value
	 * @return 返回删除后的长度
	 */
	long lremove(string key, long count, object value);
 
	/**
	 * 向bitmap中新增值
	 * @param key key
	 * @param offset 偏移量
	 * @param b 状态
	 * @return 结果
	 */
	boolean bitadd(string key, int offset, boolean b);
 
	/**
	 * 从bitmap中获取偏移量的值
	 * @param key key
	 * @param offset 偏移量
	 * @return 结果
	 */
	boolean bitget(string key, int offset);
 
	/**
	 * 获取bitmap的key值总和
	 * @param key key
	 * @return 总和
	 */
	long bitcount(string key);
 
	/**
	 * 获取bitmap范围值
	 * @param key key
	 * @param limit 范围
	 * @param offset 开始偏移量
	 * @return long类型集合
	 */
	list<long> bitfield(string key, int limit, int offset);
 
	/**
	 * 获取所有bitmap
	 * @param key key
	 * @return 以二进制字节数组返回
	 */
	byte[] bitgetall(string key);
 
	/**
	 * 增加坐标
	 * @param key key
	 * @param x x
	 * @param y y
	 * @param name 地点名称
	 * @return 返回结果
	 */
	long geoadd(string key, double x, double y, string name);
 
	/**
	 * 根据城市名称获取坐标集合
	 * @param key key
	 * @param place 地点
	 * @return 坐标集合
	 */
	list<point> geogetpointlist(string key, object... place);
 
	/**
	 * 计算两个城市之间的距离
	 * @param key key
	 * @param placeone 地点1
	 * @param placetow 地点2
	 * @return 返回距离
	 */
	distance geocalculationdistance(string key, string placeone, string placetow);
 
	/**
	 * 获取附该地点附近的其他地点
	 * @param key key
	 * @param place 地点
	 * @param distance 附近的范围
	 * @param limit 查几条
	 * @param sort 排序规则
	 * @return 返回附近的地点集合
	 */
	georesults<redisgeocommands.geolocation<object>> geonearbyplace(string key, string place, distance distance,
			long limit, sort.direction sort);
 
	/**
	 * 获取地点的hash
	 * @param key key
	 * @param place 地点
	 * @return 返回集合
	 */
	list<string> geogethash(string key, string... place);
 
}
package com.xxx.redis.service.impl;
 
import lombok.requiredargsconstructor;
import org.springframework.data.domain.sort;
import org.springframework.data.geo.distance;
import org.springframework.data.geo.georesults;
import org.springframework.data.geo.point;
import org.springframework.data.redis.connection.bitfieldsubcommands;
import org.springframework.data.redis.connection.redisgeocommands;
import org.springframework.data.redis.core.rediscallback;
import org.springframework.data.redis.core.redistemplate;
 
import java.util.*;
import java.util.concurrent.timeunit;
 
import static com.xxx.redis.constant.redisconstants.decr_by_expire_lua_script;
import static com.xxx.redis.constant.redisconstants.incr_by_expire_lua_script;
 
/**
 * 默认 redis 服务实现
 *
 * @author xm.z
 */
@requiredargsconstructor
public class defaultredisserviceimpl extends abstractredisservice {
 
	private final redistemplate<string, object> redistemplate;
 
	/**
	 * 获取所有符合指定表达式的 key
	 * @param pattern 表达式
	 * @return java.util.set
	 * @see <a href="http://redis.io/commands/keys" rel="external nofollow"  rel="external nofollow" >keys command</a>
	 */
	@override
	public set<string> keys(string pattern) {
		return redistemplate.keys(pattern);
	}
 
	/**
	 * 保存属性
	 * @param key key值
	 * @param value value值
	 * @param time 时间戳
	 */
	@override
	public void set(string key, object value, long time) {
		valueops().set(key, value, time, timeunit.seconds);
	}
 
	/**
	 * 保存属性
	 * @param key key值
	 * @param value value值
	 */
	@override
	public void set(string key, object value) {
		valueops().set(key, value);
	}
 
	/**
	 * 获取属性
	 * @param key key值
	 * @return 返回对象
	 */
	@override
	public object get(string key) {
		return valueops().get(key);
	}
 
	/**
	 * 从指定的 keys 批量获取属性
	 * @param keys keys
	 * @return values list,当值为空时,该 key 对应的 value 为 null
	 * @see <a href="http://redis.io/commands/mget" rel="external nofollow"  rel="external nofollow" >mget command</a>
	 */
	@override
	public list<object> mget(collection<string> keys) {
		return valueops().multiget(keys);
	}
 
	/**
	 * 批量获取 keys 的属性,并返回一个 map
	 * @param keys keys
	 * @return map,key 和 value 的键值对集合,当 value 获取为 null 时,不存入此 map
	 */
	@override
	public map<string, object> mgettomap(collection<string> keys) {
		list<object> values = valueops().multiget(keys);
		map<string, object> map = new hashmap<>(keys.size());
		if (values == null || values.isempty()) {
			return map;
		}
 
		iterator<string> keysiterator = keys.iterator();
		iterator<object> valuesiterator = values.iterator();
		while (keysiterator.hasnext()) {
			string key = keysiterator.next();
			object value = valuesiterator.next();
			if (value != null) {
				map.put(key, value);
			}
		}
		return map;
	}
 
	/**
	 * 删除属性
	 * @param key key值
	 * @return 返回成功
	 */
	@override
	public boolean del(string key) {
		return redistemplate.delete(key);
	}
 
	/**
	 * 批量删除属性
	 * @param keys key值集合
	 * @return 返回删除数量
	 */
	@override
	public long del(collection<string> keys) {
		return redistemplate.delete(keys);
	}
 
	/**
	 * 设置过期时间
	 * @param key key值
	 * @param time 时间戳
	 * @return 返回成功
	 */
	@override
	public boolean expire(string key, long time) {
		return redistemplate.expire(key, time, timeunit.seconds);
	}
 
	/**
	 * 获取过期时间
	 * @param key key值
	 * @return 返回时间戳
	 */
	@override
	public long getexpire(string key) {
		return redistemplate.getexpire(key, timeunit.seconds);
	}
 
	/**
	 * 判断key是否存在
	 * @param key key值
	 * @return 返回
	 */
	@override
	public boolean haskey(string key) {
		return redistemplate.haskey(key);
	}
 
	/**
	 * 按delta递增
	 * @param key key值
	 * @param delta delta值
	 * @return 返回递增后结果
	 */
	@override
	public long incr(string key, long delta) {
		return valueops().increment(key, delta);
	}
 
	/**
	 * 按delta递增并设置过期时间
	 * @param key key值
	 * @param delta delta值
	 * @param timeout 过期时间(单位:秒)
	 * @return 返回递增后结果
	 */
	@override
	public long incrandexpire(string key, long delta, long timeout) {
		return redistemplate.execute(incr_by_expire_lua_script, collections.singletonlist(key), string.valueof(delta),
				string.valueof(timeout));
	}
 
	/**
	 * 按delta递减
	 * @param key key值
	 * @param delta delta值
	 * @return 返回递减后结果
	 */
	@override
	public long decr(string key, long delta) {
		return valueops().decrement(key, delta);
	}
 
	/**
	 * 按delta递减并设置过期时间
	 * @param key key值
	 * @param delta delta值
	 * @param timeout 过期时间(单位:秒)
	 * @return 返回递减后结果
	 */
	@override
	public long decrandexpire(string key, long delta, long timeout) {
		return redistemplate.execute(decr_by_expire_lua_script, collections.singletonlist(key), string.valueof(delta),
				string.valueof(timeout));
	}
 
	/**
	 * 获取hash结构中的属性
	 * @param key 外部key值
	 * @param hashkey 内部key值
	 * @return 返回内部key的value
	 */
	@override
	public object hget(string key, string hashkey) {
		return hashops().get(key, hashkey);
	}
 
	/**
	 * 向hash结构中放入一个属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param value 内部key的value
	 * @param time 过期时间
	 * @return 返回是否成功
	 */
	@override
	public boolean hset(string key, string hashkey, object value, long time) {
		hashops().put(key, hashkey, value);
		return expire(key, time);
	}
 
	/**
	 * 向hash结构中放入一个属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param value 内部key的value
	 */
	@override
	public void hset(string key, string hashkey, object value) {
		hashops().put(key, hashkey, value);
	}
 
	/**
	 * 直接获取整个hash结构
	 * @param key 外部key值
	 * @return 返回hashmap
	 */
	@override
	public map<object, object> hgetall(string key) {
		return hashops().entries(key);
	}
 
	/**
	 * 直接设置整个hash结构
	 * @param key 外部key
	 * @param map hashmap值
	 * @param time 过期时间
	 * @return 返回是否成功
	 */
	@override
	public boolean hsetall(string key, map<string, object> map, long time) {
		hashops().putall(key, map);
		return expire(key, time);
	}
 
	/**
	 * 直接设置整个hash结构
	 * @param key 外部key
	 * @param map hashmap值
	 */
	@override
	public void hsetall(string key, map<string, ?> map) {
		hashops().putall(key, map);
	}
 
	/**
	 * 删除hash结构中的属性
	 * @param key 外部key值
	 * @param hashkey 内部key值
	 */
	@override
	public void hdel(string key, object... hashkey) {
		hashops().delete(key, hashkey);
	}
 
	/**
	 * 判断hash结构中是否有该属性
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @return 返回是否存在
	 */
	@override
	public boolean hhaskey(string key, string hashkey) {
		return hashops().haskey(key, hashkey);
	}
 
	/**
	 * hash结构中属性递增
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param delta 递增条件
	 * @return 返回递增后的数据
	 */
	@override
	public long hincr(string key, string hashkey, long delta) {
		return hashops().increment(key, hashkey, delta);
	}
 
	/**
	 * hash结构中属性递减
	 * @param key 外部key
	 * @param hashkey 内部key
	 * @param delta 递增条件
	 * @return 返回递减后的数据
	 */
	@override
	public long hdecr(string key, string hashkey, long delta) {
		return hashops().increment(key, hashkey, -delta);
	}
 
	/**
	 * 获取set结构
	 * @param key key
	 * @return 返回set集合
	 */
	@override
	public set<object> smembers(string key) {
		return setops().members(key);
	}
 
	/**
	 * 向set结构中添加属性
	 * @param key key
	 * @param values value集
	 * @return 返回增加数量
	 */
	@override
	public long sadd(string key, object... values) {
		return setops().add(key, values);
	}
 
	/**
	 * 向set结构中添加属性
	 * @param key key
	 * @param time 过期时间
	 * @param values 值集合
	 * @return 返回添加的数量
	 */
	@override
	public long sadd(string key, long time, object... values) {
		long count = setops().add(key, values);
		expire(key, time);
		return count;
	}
 
	/**
	 * 是否为set中的属性
	 * @param key key
	 * @param value value
	 * @return 返回是否存在
	 */
	@override
	public boolean sismember(string key, object value) {
		return setops().ismember(key, value);
	}
 
	/**
	 * 获取set结构的长度
	 * @param key key
	 * @return 返回长度
	 */
	@override
	public long ssize(string key) {
		return setops().size(key);
	}
 
	/**
	 * 删除set结构中的属性
	 * @param key key
	 * @param values value集合
	 * @return 删除掉的数据量
	 */
	@override
	public long sremove(string key, object... values) {
		return setops().remove(key, values);
	}
 
	/**
	 * 获取list结构中的属性
	 * @param key key
	 * @param start 开始
	 * @param end 结束
	 * @return 返回查询的集合
	 */
	@override
	public list<object> lrange(string key, long start, long end) {
		return listops().range(key, start, end);
	}
 
	/**
	 * 获取list结构的长度
	 * @param key key
	 * @return 长度
	 */
	@override
	public long lsize(string key) {
		return listops().size(key);
	}
 
	/**
	 * 根据索引获取list中的属性
	 * @param key key
	 * @param index 索引
	 * @return 对象
	 */
	@override
	public object lindex(string key, long index) {
		return listops().index(key, index);
	}
 
	/**
	 * 向list结构中添加属性
	 * @param key key
	 * @param value value
	 * @return 增加后的长度
	 */
	@override
	public long lpush(string key, object value) {
		return listops().rightpush(key, value);
	}
 
	/**
	 * 向list结构中添加属性
	 * @param key key
	 * @param value value
	 * @param time 过期时间
	 * @return 增加后的长度
	 */
	@override
	public long lpush(string key, object value, long time) {
		long index = listops().rightpush(key, value);
		expire(key, time);
		return index;
	}
 
	/**
	 * 向list结构中批量添加属性
	 * @param key key
	 * @param values value 集合
	 * @return 增加后的长度
	 */
	@override
	public long lpushall(string key, object... values) {
		return listops().rightpushall(key, values);
	}
 
	/**
	 * 向list结构中批量添加属性
	 * @param key key
	 * @param time 过期时间
	 * @param values value集合
	 * @return 增加后的长度
	 */
	@override
	public long lpushall(string key, long time, object... values) {
		long count = listops().rightpushall(key, values);
		expire(key, time);
		return count;
	}
 
	/**
	 * 从list结构中移除属性
	 * @param key key
	 * @param count 总量
	 * @param value value
	 * @return 返回删除后的长度
	 */
	@override
	public long lremove(string key, long count, object value) {
		return listops().remove(key, count, value);
	}
 
	/**
	 * 向bitmap中新增值
	 * @param key key
	 * @param offset 偏移量
	 * @param b 状态
	 * @return 结果
	 */
	@override
	public boolean bitadd(string key, int offset, boolean b) {
		return valueops().setbit(key, offset, b);
	}
 
	/**
	 * 从bitmap中获取偏移量的值
	 * @param key key
	 * @param offset 偏移量
	 * @return 结果
	 */
	@override
	public boolean bitget(string key, int offset) {
		return valueops().getbit(key, offset);
	}
 
	/**
	 * 获取bitmap的key值总和
	 * @param key key
	 * @return 总和
	 */
	@override
	public long bitcount(string key) {
		return redistemplate.execute((rediscallback<long>) con -> con.bitcount(key.getbytes()));
	}
 
	/**
	 * 获取bitmap范围值
	 * @param key key
	 * @param limit 范围
	 * @param offset 开始偏移量
	 * @return long类型集合
	 */
	@override
	public list<long> bitfield(string key, int limit, int offset) {
		return redistemplate.execute((rediscallback<list<long>>) con -> con.bitfield(key.getbytes(),
				bitfieldsubcommands.create().get(bitfieldsubcommands.bitfieldtype.unsigned(limit)).valueat(offset)));
	}
 
	/**
	 * 获取所有bitmap
	 * @param key key
	 * @return 以二进制字节数组返回
	 */
	@override
	public byte[] bitgetall(string key) {
		return redistemplate.execute((rediscallback<byte[]>) con -> con.get(key.getbytes()));
	}
 
	/**
	 * 增加坐标
	 * @param key key
	 * @param x x
	 * @param y y
	 * @param name 地点名称
	 * @return 返回结果
	 */
	@override
	public long geoadd(string key, double x, double y, string name) {
		return geoops().add(key, new point(x, y), name);
	}
 
	/**
	 * 根据城市名称获取坐标集合
	 * @param key key
	 * @param place 地点
	 * @return 坐标集合
	 */
	@override
	public list<point> geogetpointlist(string key, object... place) {
		return geoops().position(key, place);
	}
 
	/**
	 * 计算两个城市之间的距离
	 * @param key key
	 * @param placeone 地点1
	 * @param placetow 地点2
	 * @return 返回距离
	 */
	@override
	public distance geocalculationdistance(string key, string placeone, string placetow) {
		return geoops().distance(key, placeone, placetow, redisgeocommands.distanceunit.kilometers);
	}
 
	/**
	 * 获取附该地点附近的其他地点
	 * @param key key
	 * @param place 地点
	 * @param distance 附近的范围
	 * @param limit 查几条
	 * @param sort 排序规则
	 * @return 返回附近的地点集合
	 */
	@override
	public georesults<redisgeocommands.geolocation<object>> geonearbyplace(string key, string place, distance distance,
			long limit, sort.direction sort) {
		redisgeocommands.georadiuscommandargs args = redisgeocommands.georadiuscommandargs.newgeoradiusargs()
			.includedistance()
			.includecoordinates();
		// 判断排序方式
		if (sort.direction.asc == sort) {
			args.sortascending();
		}
		else {
			args.sortdescending();
		}
		args.limit(limit);
		return geoops().radius(key, place, distance, args);
	}
 
	/**
	 * 获取地点的hash
	 * @param key key
	 * @param place 地点
	 * @return 返回集合
	 */
	@override
	public list<string> geogethash(string key, string... place) {
		return geoops().hash(key, place);
	}
 
	/**
	 * get helper class that simplifies redis data access code.
	 * @return redistemplate 获取
	 */
	@override
	protected redistemplate<string, object> gettemplate() {
		return redistemplate;
	}
 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com