{"id":20433131,"url":"https://github.com/sivaosorg/unused-ngx-blobs-cache","last_synced_at":"2026-05-10T15:40:31.248Z","repository":{"id":127154343,"uuid":"441713455","full_name":"sivaosorg/unused-ngx-blobs-cache","owner":"sivaosorg","description":"Config middleware base caches","archived":false,"fork":false,"pushed_at":"2022-10-04T15:27:59.000Z","size":90,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-26T19:02:06.539Z","etag":null,"topics":["cache","cache-storage","redis","redis-cache","redis-cloud","redis-cluster","redis-command","redis-sentinel"],"latest_commit_sha":null,"homepage":"https://github.com/sivaosorg/ngx-blobs-cache","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sivaosorg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-25T16:08:43.000Z","updated_at":"2024-05-08T15:10:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"e1e067d4-97f8-4af2-abff-8af39f365208","html_url":"https://github.com/sivaosorg/unused-ngx-blobs-cache","commit_stats":null,"previous_names":["sivaosorg/unused-ngx-blobs-cache","sivaosorg/ngx-blobs-cache"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sivaosorg/unused-ngx-blobs-cache","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivaosorg%2Funused-ngx-blobs-cache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivaosorg%2Funused-ngx-blobs-cache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivaosorg%2Funused-ngx-blobs-cache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivaosorg%2Funused-ngx-blobs-cache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sivaosorg","download_url":"https://codeload.github.com/sivaosorg/unused-ngx-blobs-cache/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivaosorg%2Funused-ngx-blobs-cache/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32862086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"ssl_error","status_checked_at":"2026-05-10T13:40:02.145Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cache","cache-storage","redis","redis-cache","redis-cloud","redis-cluster","redis-command","redis-sentinel"],"created_at":"2024-11-15T08:17:50.113Z","updated_at":"2026-05-10T15:40:31.220Z","avatar_url":"https://github.com/sivaosorg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg alt=\"Eagle logo\" src=\"assets/cache.png\" width=\"224px\"/\u003e\u003cbr/\u003e\n  Config middleware base caches\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\nThe base library including redis cache, ...\n\u003cbr/\u003e\n\u003c/p\u003e\n\n\n## ⚡️ Quick start\n\nBuild application:\n\n```bash\n/bin/bash gradlew jar\n```\n\u003e output jar: \u003cb\u003e\u003ci\u003engx-blobs-cache-1.0.0.jar\u003c/i\u003e\u003c/b\u003e\n\n## :rocket: Functions\n\n#### Redis Cache Attributes\n\n:package: add file [`application-redis.yml`](src/main/resources/application-redis.yml)\n\n```yml\nspring:\n  redis:\n    database: 0 # Redis database index (default is 0)\n    jedis:\n      pool:\n        max-active: 20 # Maximum connection number (no limit is limited)\n        max-wait: -1 # Connect the pool maximum blocking waiting time (no limit is limited)\n        max-idle: 100 # Connect the maximum idle connection in the pool\n        min-idle: 10\n    timeout: 20000 # Connect timeout (s)\n```\n\n:package: checkout file [`application-params.yml`](src/main/resources/application-params.yml)\n\n```yml\n# ////////////////////////////\n# Config Redis Jedis Attributes\n# ////////////////////////////\n---\nspring:\n  redis:\n    jedis-starter:\n      enabled: false # enable jedis client\n```\n\n:package: checkout `application-dev.yml`, `application-local.yml`, `application-prod.yml`\n\n```yml\n# ////////////////////////////\n# Config Spring Attributes\n# ////////////////////////////\n---\nspring:\n  redis:\n    host: 127.0.0.1\n    password: 123456\n    port: 6379\n    sentinel:\n      master:\n        name: master_node\n      host-and-port: 13.232.155.79:26379;13.232.155.88:26379;13.232.154.78:26379\n```\n\n#### Redis Pub-Sub Attributes\n\n:package: checkout file [`application-params.yml`](src/main/resources/application-params.yml)\n\n```yml\n# ////////////////////////////\n# Config hook redis pub-sub\n# ////////////////////////////\n---\nspring:\n  redis:\n    pub-sub-starter:\n      topic: CALLBACK # including: CALLBACK, MEMO, SHIFT, EFFECTOR and DEFAULT\n      clusters:\n        - enable: true\n          order: 1 # order priority\n          label: sys::props\n          description: This is Sys props state\n          clusterType: CALLBACK # including: CALLBACK, MEMO, SHIFT, EFFECTOR and DEFAULT\n        - enable: true\n          order: 2\n          label: subscription\n          description: This is Subscription props state\n          clusterType: CALLBACK\n          prefix: ::state\n```\n\n#### Services\n\n- `NgxRedisBaseService`: use service for base action on redis\n\n```java\n/**\n * @apiNote RedisKeys - using this class to get keys type, ex: RedisKeys.getSysConfigKey(\"test\")\n */\npublic interface NgxRedisBaseService {\n\n    /**\n     * Get list of basic objects of cache\n     *\n     * @param pattern string prefix\n     * @return object list\n     */\n    Collection\u003cString\u003e keys(RedisTemplate\u003cString, Object\u003e redisTemplate, String pattern);\n\n    /**\n     * Cache basic objects, integer, string, physical classes, etc.\n     *\n     * @param key   Cache key value\n     * @param value Cache\n     */\n    \u003cT\u003e void setCacheObject(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, T value);\n\n    /**\n     * Cache basic objects, integer, string, physical classes, etc.\n     *\n     * @param key      Cache key value\n     * @param value    Cache\n     * @param timeout  time\n     * @param timeUnit Time Parts\n     */\n    \u003cT\u003e void setCacheObject(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, T value, Integer timeout, TimeUnit timeUnit);\n\n    /**\n     * Set effective time\n     *\n     * @param key     Redis button\n     * @param timeout timeout time\n     * @return true = set success; false = set failed\n     */\n    boolean expire(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long timeout);\n\n    /**\n     * Set effective time\n     *\n     * @param key     Redis button\n     * @param timeout timeout time\n     * @param unit    Time Unit\n     * @return true = set success; false = set failed\n     */\n\n    boolean expire(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long timeout, TimeUnit unit);\n\n\n    /**\n     * Get the basic object of the cache.\n     *\n     * @param key Cache key value\n     * @return Cache key value corresponding to data\n     */\n\n    \u003cT\u003e T getCacheObject(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    /**\n     * Delete a single object\n     *\n     * @param key -\n     */\n    boolean deleteObject(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    /**\n     * Delete set objects\n     *\n     * @param collection multiple objects\n     * @return integer\n     */\n\n    long deleteObject(RedisTemplate\u003cString, Object\u003e redisTemplate, Collection\u003cString\u003e collection);\n\n    /**\n     * Cache List data\n     *\n     * @param key  Cache key value\n     * @param list worthy List data\n     * @return object\n     */\n    \u003cT\u003e long setCacheList(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, List\u003cT\u003e list);\n\n    /**\n     * Get the List object of the cache\n     *\n     * @param key Cache key value\n     * @return Cache key value corresponding to data\n     */\n    \u003cT\u003e List\u003cT\u003e getCacheList(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    /**\n     * Cache SET\n     *\n     * @param key     Cache key value\n     * @param dataSet Cache data\n     * @return object of cache data\n     */\n    \u003cT\u003e BoundSetOperations\u003cString, T\u003e setCacheSet(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, Set\u003cT\u003e dataSet);\n\n    /**\n     * Get a cache SET\n     *\n     * @param key -\n     * @return -\n     */\n    \u003cT\u003e Set\u003cT\u003e getCacheSet(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    /**\n     * Cache MAP\n     *\n     * @param key -\n     * @param map -\n     */\n    \u003cT\u003e void setCacheMap(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, Map\u003cString, T\u003e map);\n\n    /**\n     * Get the MAP of the cache\n     *\n     * @param key -\n     * @return -\n     */\n    Map\u003cObject, Object\u003e getCacheMap(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    /**\n     * Save data from Hash\n     *\n     * @param key   Redis button\n     * @param hKey  Hash button\n     * @param value Value\n     */\n    \u003cT\u003e void setCacheMapValue(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, String hKey, T value);\n\n    /**\n     * Get data in hash object\n     *\n     * @param key  Redis button\n     * @param hKey Hash button\n     * @return Hash objects\n     */\n    \u003cT\u003e T getCacheMapValue(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, String hKey);\n\n    /**\n     * Get data in multiple HASH\n     *\n     * @param key   Redis button\n     * @param hKeys Hash key collection\n     * @return hash object set\n     */\n    \u003cT\u003e List\u003cT\u003e getMultiCacheMapValue(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, Collection\u003cObject\u003e hKeys);\n\n    Collection\u003cString\u003e keys(RedisTemplate\u003cString, Object\u003e redisTemplate);\n\n    boolean containsKey(RedisTemplate\u003cString, Object\u003e redisTemplate, String key);\n\n    \u003cT\u003e void publishEvent(RedisTemplate\u003cString, Object\u003e redisTemplate, ChannelTopic channelTopic, T data);\n\n    \u003cT\u003e void publishEvent(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisPubSubType topic, T data);\n\n    \u003cT\u003e void publishEvent(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisPubSubLabel topic, T data);\n\n    Long countExistingKeys(RedisTemplate\u003cString, Object\u003e redisTemplate, Collection\u003cString\u003e keys);\n\n    Boolean isAvailable(RedisTemplate\u003cString, Object\u003e redisTemplate);\n}\n\n```\n\n- `NgxRedisStylesBaseService`: use service for all combine base `NgxRedisBaseService` for action on redis\n  \n```java\n@SuppressWarnings({\"UnusedReturnValue\"})\npublic interface NgxRedisStylesBaseService {\n\n    Collection\u003cString\u003e keys(String pattern);\n\n    Collection\u003cString\u003e keys();\n\n    \u003cT\u003e void setCacheObject(RedisStylesRequest redisStylesRequest, T value);\n\n    \u003cT\u003e void setCacheObject(RedisStylesRequest redisStylesRequest, T value, Integer timeout, TimeUnit timeUnit);\n\n    boolean expire(RedisStylesRequest redisStylesRequest, long timeout);\n\n    boolean expire(RedisStylesRequest redisStylesRequest, long timeout, TimeUnit unit);\n\n    \u003cT\u003e T getCacheObject(RedisStylesRequest redisStylesRequest);\n\n    boolean deleteObject(RedisStylesRequest redisStylesRequest);\n\n    long deleteObject(Collection\u003cString\u003e collection);\n\n    \u003cT\u003e long setCacheList(RedisStylesRequest redisStylesRequest, List\u003cT\u003e list);\n\n    \u003cT\u003e List\u003cT\u003e getCacheList(RedisStylesRequest redisStylesRequest);\n\n    \u003cT\u003e BoundSetOperations\u003cString, T\u003e setCacheSet(RedisStylesRequest redisStylesRequest, Set\u003cT\u003e dataSet);\n\n    \u003cT\u003e Set\u003cT\u003e getCacheSet(RedisStylesRequest redisStylesRequest);\n\n    \u003cT\u003e void setCacheMap(RedisStylesRequest redisStylesRequest, Map\u003cString, T\u003e map);\n\n    Map\u003cObject, Object\u003e getCacheMap(RedisStylesRequest redisStylesRequest);\n\n    \u003cT\u003e void setCacheMapValue(RedisStylesRequest redisStylesRequest, String hKey, T value);\n\n    \u003cT\u003e T getCacheMapValue(RedisStylesRequest redisStylesRequest, String hKey);\n\n    \u003cT\u003e List\u003cT\u003e getMultiCacheMapValue(RedisStylesRequest redisStylesRequest, Collection\u003cObject\u003e hKeys);\n\n    boolean containsKey(RedisStylesRequest redisStylesRequest);\n\n    Long countExistingKeys(Collection\u003cString\u003e keys);\n\n    \u003cT\u003e void publishEvent(ChannelTopic channelTopic, T data);\n\n    \u003cT\u003e void publishEvent(RedisPubSubType topic, T data);\n\n    \u003cT\u003e void publishEvent(RedisPubSubLabel topic, T data);\n\n    SIVAResponseDTO\u003c?\u003e takeValuesFKeys(RedisStylesRequest redisStylesRequest);\n\n    SIVAResponseDTO\u003c?\u003e takeValuesFKeys(String keyPref);\n\n    \u003cT\u003e SIVAResponseDTO\u003c?\u003e updateCacheObject(String keyPref, T value);\n\n    Boolean isAvailable();\n}\n```\n\n- `NgxRedisUtils`: class utils for action on redis\n\n```java\n@SuppressWarnings({\"ConstantConditions\", \"rawtypes\", \"All\"})\npublic class NgxRedisUtils {\n\n    public static Long increaseKey(RedisTemplate\u003cString, Object\u003e redisTemplate, String key) {\n        if (StringUtility.isEmpty(key)) {\n            return -1L;\n        }\n\n        return (long) redisTemplate.execute((RedisCallback) connection -\u003e {\n            byte[] paramBytes = redisTemplate.getStringSerializer().serialize(key);\n            return connection.incr(paramBytes);\n        }, true);\n    }\n\n    public static Long increaseKey(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key) {\n        return increaseKey(redisTemplate, RedisStylesUtils.takeRedisKey(key));\n    }\n\n    public static Long decreaseKey(RedisTemplate\u003cString, Object\u003e redisTemplate, String key) {\n        if (StringUtility.isEmpty(key)) {\n            return -1L;\n        }\n\n        return (long) redisTemplate.execute((RedisCallback) connection -\u003e {\n            byte[] paramBytes = redisTemplate.getStringSerializer().serialize(key);\n            return connection.decr(paramBytes);\n        }, true);\n    }\n\n    public static Long decreaseKey(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key) {\n        return decreaseKey(redisTemplate, RedisStylesUtils.takeRedisKey(key));\n    }\n\n    public static Long increaseKeyBy(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long value) {\n        final String preKey = key;\n        final long preValue = value;\n        return (long) redisTemplate.execute(new RedisCallback() {\n\n            public Object doInRedis(RedisConnection connection) {\n                byte[] paramBytes = redisTemplate.getStringSerializer().serialize(preKey);\n                return connection.incrBy(paramBytes, preValue);\n            }\n        }, true);\n    }\n\n    public static Long increaseKeyBy(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long value) {\n        return increaseKeyBy(redisTemplate, RedisStylesUtils.takeRedisKey(key), value);\n    }\n\n    public static Long decreaseKeyBy(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long value) {\n        final String preKey = key;\n        final long preValue = value;\n        return (long) redisTemplate.execute(new RedisCallback() {\n\n            public Object doInRedis(RedisConnection connection) {\n                byte[] paramBytes = redisTemplate.getStringSerializer().serialize(preKey);\n                return connection.decrBy(paramBytes, preValue);\n            }\n        }, true);\n    }\n\n    public static Long decreaseKeyBy(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long value) {\n        return decreaseKeyBy(redisTemplate, RedisStylesUtils.takeRedisKey(key), value);\n    }\n\n    public static Long increaseKeyEx(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long timeOut, TimeUnit unit) {\n        long value = increaseKey(redisTemplate, key);\n        redisTemplate.expire(key, timeOut, unit);\n        return value;\n    }\n\n    public static Long increaseKeyEx(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long timeOut, TimeUnit unit) {\n        return increaseKeyEx(redisTemplate, RedisStylesUtils.takeRedisKey(key), timeOut, unit);\n    }\n\n    public static Long decreaseKeyEx(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long timeOut, TimeUnit unit) {\n        long value = decreaseKey(redisTemplate, key);\n        redisTemplate.expire(key, timeOut, unit);\n        return value;\n    }\n\n    public static Long decreaseKeyEx(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long timeOut, TimeUnit unit) {\n        return decreaseKeyEx(redisTemplate, RedisStylesUtils.takeRedisKey(key), timeOut, unit);\n    }\n\n    public static Long increaseKeyByEx(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long value, long timeOut, TimeUnit unit) {\n        long keySet = increaseKeyBy(redisTemplate, key, value);\n        redisTemplate.expire(key, timeOut, unit);\n        return keySet;\n    }\n\n    public static Long increaseKeyByEx(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long value, long timeOut, TimeUnit unit) {\n        return increaseKeyByEx(redisTemplate, RedisStylesUtils.takeRedisKey(key), value, timeOut, unit);\n    }\n\n    public static Long decreaseKeyByEx(RedisTemplate\u003cString, Object\u003e redisTemplate, String key, long value, long timeOut, TimeUnit unit) {\n        long keySet = decreaseKeyBy(redisTemplate, key, value);\n        redisTemplate.expire(key, timeOut, unit);\n        return keySet;\n    }\n\n    public static Long decreaseKeyByEx(RedisTemplate\u003cString, Object\u003e redisTemplate, RedisStylesRequest key, long value, long timeOut, TimeUnit unit) {\n        return decreaseKeyByEx(redisTemplate, RedisStylesUtils.takeRedisKey(key), value, timeOut, unit);\n    }\n}\n```\n\n- `RedisStylesRequest`: model to build redis key\n  \n```java\n    private static void onRedisKey() {\n\n        RedisStylesRequest request = new RedisStylesRequest.RedisStylesRequestBuilder()\n                .onMasterKey(\"parent_key\")\n                .onRedisKey(\"mouse_child\")\n                .onGeolocationType(GeolocationType.VIETNAM_GEOLOCATION)\n                .onRedisPropsType(RedisPropsType.ObjectType)\n                .onRedisStylesType(RedisStylesType.USER_KEY)\n                .onUserKey(\"self\")\n                .build();\n\n        System.out.println(\"redis key accomplished = \" + request.asKey); // call field public to get redis key, o = parent_key:user:self:vietnam:object\n        System.out.println(\"redis key accomplished = \" + RedisStylesRequest.asKeyRendered(request)); // call from utils method to get redis key, o = parent_key:user:self:vietnam:object\n    }\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsivaosorg%2Funused-ngx-blobs-cache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsivaosorg%2Funused-ngx-blobs-cache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsivaosorg%2Funused-ngx-blobs-cache/lists"}