[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CDDZWZPWWZFVKSH8MPR1NB":3,"skill-same:01M6CDDZWZPWWZFVKSH8MPR1NB":178},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6CDDZWZPWWZFVKSH8MPR1NB","implementing-database-caching",null,"Use when you need to implement multi-tier caching to improve database performance.\nThis skill sets up Redis, in-memory caching, and CDN layers to reduce database load.\nTrigger with phrases like \"implement database caching\", \"add Redis cache layer\",\n\"improve query performance with caching\", or \"reduce database load\".","BbgnsurfTech\u002Fclaude-skills-collection","BbgnsurfTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F59598605?v=4","01M6C5ZT4G3G4QPQB64QDVW438","Bbgnsurf Technologies","01M6C5ZT8JN4VWSZZH3DD8J4EG",29,"MIT","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"Implementing Database Caching","database","redis","up","use","edit","write","read","grep","improve","Bash","cli","cdn","cache","database performance","implement","performance","memory","docker","2026-11-10 10:12:30",false,"---\nname: implementing-database-caching\ndescription: |\n  Use when you need to implement multi-tier caching to improve database performance.\n  This skill sets up Redis, in-memory caching, and CDN layers to reduce database load.\n  Trigger with phrases like \"implement database caching\", \"add Redis cache layer\",\n  \"improve query performance with caching\", or \"reduce database load\".\nallowed-tools:\n  - Read\n  - Write\n  - Edit\n  - Grep\n  - Glob\n  - Bash(redis-cli:*, docker:redis:*)\nversion: 1.0.0\nlicense: MIT\n---\n\n## Prerequisites\n\nBefore using this skill, ensure:\n- Redis server available or ability to deploy Redis container\n- Understanding of application data access patterns and hotspots\n- Knowledge of which queries\u002Fdata benefit most from caching\n- Monitoring tools to measure cache hit rates and performance\n- Development environment for testing caching implementation\n- Understanding of cache invalidation requirements for data consistency\n\n## Instructions\n\n### Step 1: Analyze Caching Requirements\n1. Profile database queries to identify slow or frequently executed queries\n2. Determine which data is read-heavy vs write-heavy\n3. Identify data that can tolerate eventual consistency\n4. Calculate expected cache size and Redis memory requirements\n5. Document current database load and target performance metrics\n\n### Step 2: Choose Caching Strategy\n1. **Cache-Aside (Lazy Loading)**: Application checks cache first, loads from DB on miss\n   - Best for: Read-heavy workloads, unpredictable access patterns\n   - Pros: Only caches requested data, simple to implement\n   - Cons: Cache misses incur database hit, stale data possible\n2. **Write-Through**: Application writes to cache and database simultaneously\n   - Best for: Write-heavy workloads needing consistency\n   - Pros: Cache always consistent, no stale data\n   - Cons: Write latency, unnecessary caching of rarely-read data\n3. **Write-Behind (Write-Back)**: Application writes to cache, async writes to database\n   - Best for: High write throughput requirements\n   - Pros: Low write latency, batched database writes\n   - Cons: Risk of data loss, complexity in implementation\n\n### Step 3: Design Cache Architecture\n1. Set up Redis as distributed cache layer (L2 cache)\n2. Implement in-memory LRU cache in application (L1 cache)\n3. Configure CDN for static assets (images, CSS, JS)\n4. Design cache key naming convention (e.g., `user:123:profile`)\n5. Define TTL (Time To Live) for different data types\n\n### Step 4: Implement Caching Code\n1. Add Redis client library to application dependencies\n2. Create cache wrapper functions (get, set, delete, invalidate)\n3. Modify database query code to check cache before DB query\n4. Implement cache population on cache miss\n5. Add error handling for cache failures (fail gracefully to database)\n\n### Step 5: Configure Cache Invalidation\n1. Implement TTL-based expiration for time-sensitive data\n2. Add explicit cache invalidation on data updates\u002Fdeletes\n3. Use cache tags or patterns for bulk invalidation\n4. Implement cache warming for critical data after deployments\n5. Set up cache stampede prevention (lock\u002Fqueue on miss)\n\n### Step 6: Monitor and Optimize\n1. Track cache hit rate, miss rate, and eviction rate\n2. Monitor Redis memory usage and eviction policy\n3. Analyze query performance improvements\n4. Adjust TTLs based on data update frequency\n5. Identify and cache additional hot data\n\n## Output\n\nThis skill produces:\n\n**Redis Configuration**: Docker Compose or config files for Redis deployment with appropriate memory and eviction settings\n\n**Caching Code**: Application code implementing cache-aside, write-through, or write-behind patterns\n\n**Cache Key Schema**: Documentation of cache key naming conventions and TTL settings\n\n**Monitoring Dashboards**: Metrics for cache hit rates, memory usage, and performance improvements\n\n**Cache Invalidation Logic**: Code for explicit and implicit cache invalidation on data changes\n\n## Error Handling\n\n**Cache Connection Failures**:\n- Implement circuit breaker pattern to prevent cascading failures\n- Fall back to database when cache is unavailable\n- Log cache connection errors for monitoring\n- Retry cache connections with exponential backoff\n- Consider read-replica or cache cluster for high availability\n\n**Cache Stampede**:\n- Implement probabilistic early expiration (PER) for TTLs\n- Use distributed locks (Redis SETNX) to prevent concurrent cache population\n- Queue cache refresh requests instead of parallel execution\n- Add jitter to TTLs to spread expiration times\n- Use stale-while-revalidate pattern for acceptable delays\n\n**Stale Data Issues**:\n- Implement versioning in cache keys (e.g., `user:123:v2`)\n- Use cache tags for related data invalidation\n- Set aggressive TTLs for frequently changing data\n- Implement active cache invalidation on data updates\n- Monitor data consistency between cache and database\n\n**Memory Pressure**:\n- Configure Redis eviction policy (allkeys-lru recommended)\n- Monitor Redis memory usage and set max memory limits\n- Implement tiered caching (hot data in Redis, warm data in DB)\n- Reduce TTLs for less critical data\n- Scale Redis horizontally with cluster mode\n\n## Resources\n\n**Redis Configuration Templates**:\n- Docker Compose: `{baseDir}\u002Fdocker\u002Fredis-compose.yml`\n- Redis config: `{baseDir}\u002Fconfig\u002Fredis.conf`\n- Cluster config: `{baseDir}\u002Fconfig\u002Fredis-cluster.conf`\n\n**Caching Code Examples**: `{baseDir}\u002Fexamples\u002Fcaching\u002F`\n- Cache-aside pattern (Node.js, Python, Java)\n- Write-through pattern\n- Cache invalidation strategies\n- Distributed locking\n\n**Cache Key Design Guide**: `{baseDir}\u002Fdocs\u002Fcache-key-design.md`\n**Performance Tuning**: `{baseDir}\u002Fdocs\u002Fcache-performance-tuning.md`\n**Monitoring Setup**: `{baseDir}\u002Fmonitoring\u002Fredis-dashboard.json`","## Prerequisites\n\nBefore using this skill, ensure:\n- Redis server available or ability to deploy Redis container\n- Understanding of application data access patterns and hotspots\n- Knowledge of which queries\u002Fdata benefit most from caching\n- Monitoring tools to measure cache hit rates and performance\n- Development environment for testing caching implementation\n- Understanding of cache invalidation requirements for data consistency\n\n## Instructions\n\n### Step 1: Analyze Caching Requirements\n1. Profile database queries to identify slow or frequently executed queries\n2. Determine which data is read-heavy vs write-heavy\n3. Identify data that can tolerate eventual consistency\n4. Calculate expected cache size and Redis memory requirements\n5. Document current database load and target performance metrics\n\n### Step 2: Choose Caching Strategy\n1. **Cache-Aside (Lazy Loading)**: Application checks cache first, loads from DB on miss\n   - Best for: Read-heavy workloads, unpredictable access patterns\n   - Pros: Only caches requested data, simple to implement\n   - Cons: Cache misses incur database hit, stale data possible\n2. **Write-Through**: Application writes to cache and database simultaneously\n   - Best for: Write-heavy workloads needing consistency\n   - Pros: Cache always consistent, no stale data\n   - Cons: Write latency, unnecessary caching of rarely-read data\n3. **Write-Behind (Write-Back)**: Application writes to cache, async writes to database\n   - Best for: High write throughput requirements\n   - Pros: Low write latency, batched database writes\n   - Cons: Risk of data loss, complexity in implementation\n\n### Step 3: Design Cache Architecture\n1. Set up Redis as distributed cache layer (L2 cache)\n2. Implement in-memory LRU cache in application (L1 cache)\n3. Configure CDN for static assets (images, CSS, JS)\n4. Design cache key naming convention (e.g., `user:123:profile`)\n5. Define TTL (Time To Live) for different data types\n\n### Step 4: Implement Caching Code\n1. Add Redis client library to application dependencies\n2. Create cache wrapper functions (get, set, delete, invalidate)\n3. Modify database query code to check cache before DB query\n4. Implement cache population on cache miss\n5. Add error handling for cache failures (fail gracefully to database)\n\n### Step 5: Configure Cache Invalidation\n1. Implement TTL-based expiration for time-sensitive data\n2. Add explicit cache invalidation on data updates\u002Fdeletes\n3. Use cache tags or patterns for bulk invalidation\n4. Implement cache warming for critical data after deployments\n5. Set up cache stampede prevention (lock\u002Fqueue on miss)\n\n### Step 6: Monitor and Optimize\n1. Track cache hit rate, miss rate, and eviction rate\n2. Monitor Redis memory usage and eviction policy\n3. Analyze query performance improvements\n4. Adjust TTLs based on data update frequency\n5. Identify and cache additional hot data\n\n## Output\n\nThis skill produces:\n\n**Redis Configuration**: Docker Compose or config files for Redis deployment with appropriate memory and eviction settings\n\n**Caching Code**: Application code implementing cache-aside, write-through, or write-behind patterns\n\n**Cache Key Schema**: Documentation of cache key naming conventions and TTL settings\n\n**Monitoring Dashboards**: Metrics for cache hit rates, memory usage, and performance improvements\n\n**Cache Invalidation Logic**: Code for explicit and implicit cache invalidation on data changes\n\n## Error Handling\n\n**Cache Connection Failures**:\n- Implement circuit breaker pattern to prevent cascading failures\n- Fall back to database when cache is unavailable\n- Log cache connection errors for monitoring\n- Retry cache connections with exponential backoff\n- Consider read-replica or cache cluster for high availability\n\n**Cache Stampede**:\n- Implement probabilistic early expiration (PER) for TTLs\n- Use distributed locks (Redis SETNX) to prevent concurrent cache population\n- Queue cache refresh requests instead of parallel execution\n- Add jitter to TTLs to spread expiration times\n- Use stale-while-revalidate pattern for acceptable delays\n\n**Stale Data Issues**:\n- Implement versioning in cache keys (e.g., `user:123:v2`)\n- Use cache tags for related data invalidation\n- Set aggressive TTLs for frequently changing data\n- Implement active cache invalidation on data updates\n- Monitor data consistency between cache and database\n\n**Memory Pressure**:\n- Configure Redis eviction policy (allkeys-lru recommended)\n- Monitor Redis memory usage and set max memory limits\n- Implement tiered caching (hot data in Redis, warm data in DB)\n- Reduce TTLs for less critical data\n- Scale Redis horizontally with cluster mode\n\n## Resources\n\n**Redis Configuration Templates**:\n- Docker Compose: `{baseDir}\u002Fdocker\u002Fredis-compose.yml`\n- Redis config: `{baseDir}\u002Fconfig\u002Fredis.conf`\n- Cluster config: `{baseDir}\u002Fconfig\u002Fredis-cluster.conf`\n\n**Caching Code Examples**: `{baseDir}\u002Fexamples\u002Fcaching\u002F`\n- Cache-aside pattern (Node.js, Python, Java)\n- Write-through pattern\n- Cache invalidation strategies\n- Distributed locking\n\n**Cache Key Design Guide**: `{baseDir}\u002Fdocs\u002Fcache-key-design.md`\n**Performance Tuning**: `{baseDir}\u002Fdocs\u002Fcache-performance-tuning.md`\n**Monitoring Setup**: `{baseDir}\u002Fmonitoring\u002Fredis-dashboard.json`",{"name":5,"license":15,"version":48,"description":49,"allowed-tools":50},"1.0.0","Use when you need to implement multi-tier caching to improve database performance.\nThis skill sets up Redis, in-memory caching, and CDN layers to reduce database load.\nTrigger with phrases like \"implement database caching\", \"add Redis cache layer\",\n\"improve query performance with caching\", or \"reduce database load\".\n",[51,52,53,54,55,56],"Read","Write","Edit","Grep","Glob","Bash(redis-cli:*, docker:redis:*)","main","01d3fafeca1133f841956b8b90b939fee92d71e7","plugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer",9,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech","www.bbgnsurf.com","An ICT solutions provider and software development company","2025-12-18 20:19:58",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add BbgnsurfTech\u002Fclaude-skills-collection --skill implementing-database-caching",{"tool":72,"command":73},"bunx","bunx skills add BbgnsurfTech\u002Fclaude-skills-collection --skill implementing-database-caching",{"tool":75,"command":76},"pnpm","pnpm dlx skills add BbgnsurfTech\u002Fclaude-skills-collection --skill implementing-database-caching","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002FSKILL.md",true,[80,86,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,166,170,174],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"assets\u002FREADME.md","ASSET","资产文件",288,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Fassets\u002FREADME.md",{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"examples\u002Freport-and-debrief.md","REFERENCE","参考文档",6661,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Fexamples\u002Freport-and-debrief.md",{"path":93,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Faudit-correlation.md",8225,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Faudit-correlation.md",{"path":97,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fauth-bootstrap.md",8931,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fauth-bootstrap.md",{"path":101,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fbrowser-tool-detection.md",20710,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fbrowser-tool-detection.md",{"path":105,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Fconsistency-mode.md",10857,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fconsistency-mode.md",{"path":109,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":110,"sourceHtmlUrl":111},"references\u002Fconsistency-runner-and-report.md",2377,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fconsistency-runner-and-report.md",{"path":113,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":114,"sourceHtmlUrl":115},"references\u002Fdevice-profile.md",4206,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fdevice-profile.md",{"path":117,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":118,"sourceHtmlUrl":119},"references\u002Finput-acquisition.md",4511,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Finput-acquisition.md",{"path":121,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":122,"sourceHtmlUrl":123},"references\u002Finterop.md",3948,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Finterop.md",{"path":125,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":126,"sourceHtmlUrl":127},"references\u002Fpair-mode.md",3748,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fpair-mode.md",{"path":129,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":130,"sourceHtmlUrl":131},"references\u002Fpersona-debrief-format.md",3258,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fpersona-debrief-format.md",{"path":133,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":134,"sourceHtmlUrl":135},"references\u002FREADME.md",338,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Freferences\u002FREADME.md",{"path":137,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":138,"sourceHtmlUrl":139},"references\u002Frun-loop-detail.md",5090,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Frun-loop-detail.md",{"path":141,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":142,"sourceHtmlUrl":143},"references\u002Fsession-history.md",2349,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fsession-history.md",{"path":145,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":146,"sourceHtmlUrl":147},"references\u002Fsession-save-detail.md",5446,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fsession-save-detail.md",{"path":149,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":150,"sourceHtmlUrl":151},"references\u002Fshell-safe-payloads.md",2094,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fshell-safe-payloads.md",{"path":153,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":154,"sourceHtmlUrl":155},"references\u002Fverification-discipline.md",28340,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fverification-discipline.md",{"path":157,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":158,"sourceHtmlUrl":159},"references\u002Fworktree-preflight.md",3413,"https:\u002F\u002Fgithub.com\u002FLbstrydom\u002Fclaude-engineering-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpersona-test\u002Freferences\u002Fworktree-preflight.md",{"path":161,"resourceType":162,"resourceTypeDesc":163,"sizeBytes":164,"sourceHtmlUrl":165},"scripts\u002Fcache_invalidation.py","SCRIPT","脚本",2837,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Fscripts\u002Fcache_invalidation.py",{"path":167,"resourceType":162,"resourceTypeDesc":163,"sizeBytes":168,"sourceHtmlUrl":169},"scripts\u002Fcache_stats.py",2835,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Fscripts\u002Fcache_stats.py",{"path":171,"resourceType":162,"resourceTypeDesc":163,"sizeBytes":172,"sourceHtmlUrl":173},"scripts\u002FREADME.md",339,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Fscripts\u002FREADME.md",{"path":175,"resourceType":162,"resourceTypeDesc":163,"sizeBytes":176,"sourceHtmlUrl":177},"scripts\u002Fredis_setup.sh",2625,"https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Fdatabase\u002Fdatabase-cache-layer\u002Fskills\u002Fdatabase-cache-layer\u002Fscripts\u002Fredis_setup.sh",[179,197,216,237,250,264],{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":188,"publishedAt":43},"01M6CDVX5RHG36WP2Z7X8WAYYA","testing-visual-regression","Detect visual changes in UI components using screenshot comparison.\nUse when detecting unintended UI changes or pixel differences.\nTrigger with phrases like \"test visual changes\", \"compare screenshots\", or \"detect UI regressions\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Fvisual-regression-tester\u002Fskills\u002Fvisual-regression-tester\u002FSKILL.md",[185],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[189,190,191,29,32,31,30,28,192,193,194,195,196,34],"testing visual regression","testing","regression","components","test","screenshots","screenshot","ui",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":204,"publishedAt":43},"01M6CDVT4S54EMAPZ231KSP2XQ","generating-unit-tests","Automatically generate comprehensive unit tests from source code covering happy paths, edge cases, and error conditions.\nUse when creating test coverage for functions, classes, or modules.\nTrigger with phrases like \"generate unit tests\", \"create tests for\", or \"add test coverage\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Funit-test-generator\u002Fskills\u002Funit-test-generator\u002FSKILL.md",[203],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},[205,206,207,208,209,193,29,210,211,212,28,213,214,30,31,32,34,215],"unit tests","Generating Unit Tests","generate","create","add test","functions","modules","test coverage","coverage","code","edge",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":228,"publishedAt":43},"01M6CDVPQKGQ450Q50ZC84FPMR","generating-test-reports","Generate comprehensive test reports with metrics, coverage, and visualizations.\nUse when performing specialized testing.\nTrigger with phrases like \"generate test report\", \"create test documentation\", or \"show test metrics\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Ftest-report-generator\u002Fskills\u002Ftest-report-generator\u002FSKILL.md",[222,223],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":224,"categoryName":225,"taxonomyType":226,"taxonomyTypeDesc":227},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[193,229,230,231,232,28,213,29,233,30,31,234,34,235,207,208,236,190,32],"reports","Generating Test Reports","test report","specialized","report","visualizations","metrics","documentation",{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":241,"categories":242,"keywords":244,"publishedAt":43},"01M6CDVK97VFZ53CEYEGQ4QFZ6","orchestrating-test-execution","Coordinate parallel test execution across multiple environments and frameworks.\nUse when performing specialized testing.\nTrigger with phrases like \"orchestrate tests\", \"run parallel tests\", or \"coordinate test execution\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Ftest-orchestrator\u002Fskills\u002Ftest-orchestrator\u002FSKILL.md",[243],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},[245,246,193,31,28,29,30,232,32,247,34,248,249,190],"orchestrating test execution","execution","parallel","orchestrate","run",{"skillNo":251,"name":252,"nameZh":6,"description":253,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":254,"categories":255,"keywords":257,"publishedAt":43},"01M6CDVFTCBQ65TGB1YJCZB90G","managing-test-environments","Provision and manage isolated test environments with configuration and data.\nUse when performing specialized testing.\nTrigger with phrases like \"manage test environment\", \"provision test env\", or \"setup test infrastructure\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Ftest-environment-manager\u002Fskills\u002Ftest-environment-manager\u002FSKILL.md",[256],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},[258,193,29,30,31,232,32,34,259,260,261,190,262,263,28],"Managing Test Environments","data","infrastructure","setup","environment","manage",{"skillNo":265,"name":266,"nameZh":6,"description":267,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":268,"categories":269,"keywords":271,"publishedAt":43},"01M6CDVD0NPFXVEQGT9CMF02H0","generating-test-doubles","Generate mocks, stubs, spies, and fakes for dependency isolation.\nUse when creating mocks, stubs, or test isolation fixtures.\nTrigger with phrases like \"generate mocks\", \"create test doubles\", or \"setup stubs\".","https:\u002F\u002Fgithub.com\u002FBbgnsurfTech\u002Fclaude-skills-collection\u002Fblob\u002Fmain\u002Fplugins\u002Fclaude-code-plugins-plus\u002Fplugins\u002Ftesting\u002Ftest-doubles-generator\u002Fskills\u002Ftest-doubles-generator\u002FSKILL.md",[270],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},[193,272,273,28,29,30,31,32,34,207,208,261],"Generating Test Doubles","dependency"]