Redis 키 생성 - 한 곳에서 모든 Redis 키를 구성하는 쉬운 방법

12727 단어 npmnodetypescriptredis
Create Redis Key는 NodeJS용 Redis 키 생성 유틸리티인 NPM 패키지입니다(Typescript와 함께 사용할 때 가장 효과적임).

섹션


  • Motivation
  • The Package
  • How To Use

  • 동기 부여



    "Redis 키를 생성하기 위해 패키지가 필요한 이유는 무엇입니까? 그냥 문자열 아닌가요?"라고 궁금해하실 수 있습니다.

    글쎄요.

    그러나 개별 키가 문자열이더라도 대부분의 경우 많은 키를 사용합니다. 이것을 캐시하고, 저것을 캐시하고, 모두 캐시하세요!

    Redis를 기본 데이터베이스로 활용하는 백엔드 앱을 사용해 본 적이 있습니까?

    내가 하나가. Redis에 저장된 많은 리소스가 있는 마이크로서비스입니다. 1초 미만에서 몇 시간까지 다양한 예상 시간 범위에서 변경되는 데이터를 저장합니다.

    중요한 부분이 있습니다. 데이터를 캐싱하든 저장하든 키는 대부분 템플릿을 공유하며 개별 키를 다르게 만드는 것은 이러한 키가 다른 리소스를 찾으려고 하기 때문에 키의 일부로 리소스 식별자를 포함한다는 것입니다. 또한 리소스가 다른 리소스에 속해 있는 경우 키는 자신이 속한 리소스의 키로 시작합니다.

    인스타그램을 예로 들어보겠습니다.

    간단히 키users:1에 ID가 1인 사용자를 저장할 수 있습니다. 그런 다음 ID가 2인 사용자를 키users:2에 저장하는 것이 합리적이며 계속 진행됩니다.

    보시다시피 그들은 템플릿users:%UserID%을 공유하고 템플릿에는 리소스 식별자가 포함되어 있습니다.

    팔로우, 팔로어, 게시물 등과 같이 사용자에게 속한 다양한 종류의 리소스가 있습니다. 우리는 키users:%UserID%:follows , users:%UserID%:followers , users:%UserID%:posts 에 저장할 수 있습니다. 키는 그들이 속한 리소스의 키로 시작합니다(users:%UserID% ) ).

    그렇다면 모든 키를 쉽게 관리할 수 있는 방법이 있다면 좋지 않을까요?

    Redis 키 생성을 소개합니다.

    Redis 키 생성



    Redis 키 생성 유틸리티.

    매개변수를 포함하는 생성Redis Key Templates, 중첩된 구성 객체를 사용하고 Redis Key Template 문자열을 사용하여 Redis 키를 생성합니다.

    NPM의 create-redis-key을 참조하십시오.

    GitHub의 create-redis-key을 참조하십시오.

    용법



    먼저 다음과 같이 필요한 기능을 가져옵니다.

    import {
      createRedisKeyParam,
      createRedisKeysMap,
      createRedisKey,
    } from 'create-redis-key';
    

    Redis Keys Config 개체를 만듭니다.

    You should write as const at the end of the object for Typescript types to properly work.



    const redisKeysConfig = {
      SCOPE_FIRST_PART: [],
    
      // app-statuses
      appStatus: ['app-statuses'],
    
      users: {
        SCOPE_FIRST_PART: ['users'],
    
        // users:online
        online: ['online'],
    
        byID: {
          SCOPE_FIRST_PART: ['by-id', createRedisKeyParam('UserID')],
    
          feed: {
            SCOPE_FIRST_PART: ['feed'],
    
            // users:by-id:%UserID%:feed:following
            following: ['following'],
            // users:by-id:%UserID%:feed:favorites
            favorites: ['favorites'],
          },
    
          // users:by-id:%UserID%:follows
          follows: ['follows'],
          // users:by-id:%UserID%:followers
          followers: ['followers'],
          posts: {
            SCOPE_FIRST_PART: ['posts'],
    
            byID: {
              SCOPE_FIRST_PART: ['by-id', createRedisKeyParam('PostID')],
    
              // users:by-id:%UserID%:posts:by-id:%PostID%:comments
              comments: ['comments'],
              // users:by-id:%UserID%:posts:by-id:%PostID%:likes
              likes: ['likes'],
            },
          },
        },
      },
    } as const;
    


    그런 다음 구성을 사용하여 Redis Keys Templates Map를 만듭니다.

    If you give an invalid config, return type will be never.



    const RedisKeysMap = createRedisKeysMap(redisKeysConfig);
    


    결과 객체는 Redis Keys Templates Map입니다.

    {
        "appStatus": "app-statuses",
        "users": {
            "online": "users:online",
            "byID": {
                "feed": {
                    "following": "users:by-id:%UserID%:feed:following",
                    "favorites": "users:by-id:%UserID%:feed:favorites"
                },
                "follows": "users:by-id:%UserID%:follows",
                "followers": "users:by-id:%UserID%:followers",
                "posts": {
                    "byID": {
                        "comments": "users:by-id:%UserID%:posts:by-id:%PostID%:comments",
                        "likes": "users:by-id:%UserID%:posts:by-id:%PostID%:likes"
                    }
                }
            }
        }
    }
    


    그런 다음 이 맵을 사용하여 필요할 때 Redis 키를 생성할 수 있습니다.

    You will get parameter suggestions on your IDE based on the Redis Key Template you provided to createRedisKey() function.

    All params on a Redis Key Template are required. You will get type errors if you don't provide all of them.



    const likesOfPostRK = createRedisKey(RedisKeysMap.users.byID.posts.byID.likes, {
      UserID: '1234',
      PostID: '9876',
    });
    


    콘솔에 로그인하여 생성된 키를 볼 수 있습니다.

    console.log(likesOfPostRK);
    


    로그는 다음과 같습니다.

    users:by-id:1234:posts:by-id:9876:likes
    


    그리고 그게 다야. 이제 생성된 키를 사용하여 Redis에서 리소스를 읽을 수 있습니다.

    실제로 이 라이브러리를 사용할 수 있는 세 가지 방법이 있습니다. 아이디어가 마음에 들면 GitHub의 create-redis-key에서 더 많은 옵션과 설명서를 확인할 수 있습니다.

    나는 당신의 의견을보고 싶습니다. 이 작업을 수행하는 유용한 방법입니까? 이전에 작업한 프로젝트에서 본 다른 널리 채택된 전략이 있습니까? 사용하기 쉬운가요? 기존 프로젝트에서 구현하거나 향후 프로젝트에서 사용하시겠습니까?

    즐거운 코딩하세요!

    좋은 웹페이지 즐겨찾기