RedisFunctions.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package org.ssssssss.magicapi.functions;
  2. import org.springframework.data.redis.connection.RedisConnectionFactory;
  3. import org.springframework.data.redis.core.RedisCallback;
  4. import org.springframework.data.redis.core.StringRedisTemplate;
  5. import org.ssssssss.magicapi.config.MagicModule;
  6. import org.ssssssss.script.functions.DynamicMethod;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. /**
  11. * redis模块
  12. */
  13. public class RedisFunctions implements MagicModule, DynamicMethod {
  14. @Override
  15. public String getModuleName() {
  16. return "redis";
  17. }
  18. private StringRedisTemplate redisTemplate;
  19. public RedisFunctions(RedisConnectionFactory connectionFactory) {
  20. this.redisTemplate = new StringRedisTemplate(connectionFactory);
  21. }
  22. /**
  23. * 序列化
  24. */
  25. private byte[] serializer(Object value) {
  26. if(value == null || value instanceof String){
  27. return redisTemplate.getStringSerializer().serialize((String) value);
  28. }
  29. return serializer(value.toString());
  30. }
  31. /**
  32. * 反序列化
  33. */
  34. private Object deserialize(Object value) {
  35. if (value != null) {
  36. if (value instanceof byte[]) {
  37. return this.redisTemplate.getStringSerializer().deserialize((byte[]) value);
  38. }
  39. if (value instanceof List) {
  40. @SuppressWarnings("unchecked")
  41. List<Object> valueList = (List<Object>) value;
  42. List<Object> resultList = new ArrayList<>(valueList.size());
  43. for (Object val : valueList) {
  44. resultList.add(deserialize(val));
  45. }
  46. return resultList;
  47. }
  48. }
  49. return value;
  50. }
  51. /**
  52. * 执行命令
  53. * @param methodName 命令名称
  54. * @param parameters 命令参数
  55. */
  56. @Override
  57. public Object execute(String methodName, List<Object> parameters) {
  58. return this.redisTemplate.execute((RedisCallback<Object>) connection -> {
  59. byte[][] params = new byte[parameters.size()][];
  60. for (int i = 0; i < params.length; i++) {
  61. params[i] = serializer(parameters.get(i));
  62. }
  63. return deserialize(connection.execute(methodName, params));
  64. });
  65. }
  66. }