autoUpdateConfigRepo.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package redis
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "fwh-toolbox-server/cache"
  7. "fwh-toolbox-server/utils/minio"
  8. )
  9. var (
  10. autoUpdateConfigCtx = context.Background()
  11. autoUpdateConfigPrefix = "fwhtoolbox:autoUpdateConfig:"
  12. )
  13. func RefreshAutoUpdateConfigFileInfo(objList []minio.MinioFileObject) error {
  14. key := autoUpdateConfigPrefix + "fileInfo"
  15. values := make([]interface{}, 0, len(objList))
  16. // 清空整个 List
  17. // LTrim start>stop => 清空
  18. if err := cache.LTrim(autoUpdateConfigCtx, key, 1, 0); err != nil {
  19. return err
  20. }
  21. for _, obj := range objList {
  22. b, err := json.Marshal(obj)
  23. if err != nil {
  24. return err
  25. }
  26. values = append(values, b)
  27. }
  28. // 右插入(顺序保持)
  29. return cache.RPush(autoUpdateConfigCtx, key, values...)
  30. }
  31. func GetAutoUpdateConfigFileInfoTotal() (int64, error) {
  32. key := autoUpdateConfigPrefix + "fileInfo"
  33. return cache.LLen(autoUpdateConfigCtx, key)
  34. }
  35. // page 从1开始
  36. func GetAutoUpdateConfigFileInfoByPage(page uint, size uint) ([]minio.MinioFileObject, error) {
  37. total, err := GetAutoUpdateConfigFileInfoTotal()
  38. if err != nil {
  39. return nil, err
  40. }
  41. if page < 1 {
  42. return nil, fmt.Errorf("param page error(page = %d).", page)
  43. }
  44. if size < 1 {
  45. return nil, fmt.Errorf("param size error(size = %d).", size)
  46. }
  47. key := autoUpdateConfigPrefix + "fileInfo"
  48. // start := int64((page - 1) * size)
  49. // stop := int64(page*size - 1)
  50. start := total - int64((page-1)*size) - 1
  51. stop := total - int64(page*size)
  52. if start < 0 {
  53. return nil, fmt.Errorf("param page too large(page = %d).", page)
  54. }
  55. if stop < 0 {
  56. stop = 0
  57. }
  58. // 倒序查询,start和stop调换
  59. strData, err := cache.LRange(autoUpdateConfigCtx, key, stop, start)
  60. if err != nil {
  61. return nil, err
  62. }
  63. objects := make([]minio.MinioFileObject, 0, len(strData))
  64. // for _, s := range strData {
  65. // 倒转数组,因为 LRange 是从左到右,这里要倒序
  66. for i := len(strData) - 1; i >= 0; i-- {
  67. var obj minio.MinioFileObject
  68. s := strData[i]
  69. if err := json.Unmarshal([]byte(s), &obj); err != nil {
  70. return nil, err
  71. }
  72. objects = append(objects, obj)
  73. }
  74. return objects, nil
  75. }