[C#] 넷 코어에서 Redis 사용에 대한 튜토리얼

기사 시리즈



머리말

공식 튜토리얼: https://www.runoob.com/redis/redis-install.html
원격 사전 서버(Redis Remote Dictionary Server)는 Salvatore Sanfilippo가 작성한 키-값 저장 시스템입니다.
Redis는 ANSI C 언어로 작성된 오픈소스 로그형 Key-Value 데이터베이스로, BSD 프로토콜을 준수하고, 네트워크를 지원하며, 메모리 기반 및 영속성이 가능하며, 다국어 API를 제공합니다.
값은 String, Map, List, Set, Sorted Set 등의 유형이 될 수 있기 때문에 종종 데이터 구조 서버라고 불립니다.


1. Redis 소개

Redis 및 기타 키-값 캐싱 제품에는 다음과 같은 세 가지 특성이 있습니다.

  • Redis는 데이터를 디스크의 메모리에 보관하고 다시 시작할 때 사용하기 위해 다시 로드할 수 있는 데이터 지속성을 지원합니다.
  • Redis는 단순한 키-값 유형의 데이터를 지원할 뿐만 아니라 list, set, zset, hash와 같은 데이터 구조의 저장도 제공합니다.
  • Redis는 데이터 백업, 즉 마스터-슬레이브 모드의 데이터 백업을 지원합니다.

1.1 Redis의 장점

  • 매우 높은 성능 – Redis는 110,000회/초의 속도로 읽고 81,000회/초의 속도로 쓸 수 있습니다.
  • 풍부한 데이터 유형 – Redis는 바이너리 사례에 대한 문자열, 목록, 해시, 세트 및 순서가 지정된 세트 데이터 유형 작업을 지원합니다.
  • 원자성 – Redis의 모든 작업은 원자성이며 Redis는 완전히 병합된 후 여러 작업의 원자성 실행도 지원합니다.
    풍부한 기능 - Redis는 게시/구독, 알림, 키 만료 및 기타 기능도 지원합니다.

1.2 Redis는 다른 키-값 저장소와 어떻게 다릅니까?

  • Redis는 더 복잡한 데이터 구조를 갖고 있으며 이에 대한 원자적 연산을 제공하는데, 이는 다른 데이터베이스와는 다른 진화 경로입니다.
  • Redis의 데이터 유형은 기본 데이터 구조를 기반으로 하며 추가 추상화가 필요 없이 프로그래머에게 투명합니다.
  • Redis는 메모리에서 실행되지만 디스크에 유지될 수 있으므로 다양한 데이터 세트를 고속으로 읽고 쓸 때 메모리를 측정해야 하며, 데이터 양이 하드웨어 메모리보다 커서는 안 됩니다. 인메모리 데이터베이스의 또 다른 장점은 디스크의 동일한 복잡한 데이터 구조와 비교할 때 메모리에서의 작동이 매우 간단하므로 Redis는 강력한 내부 복잡성을 가지고 많은 작업을 수행할 수 있다는 것입니다. 또한 디스크 형식 측면에서 임의 액세스가 필요하지 않기 때문에 컴팩트하게 추가 생성됩니다.

2. Redis 설치 단계

2.1 다운로드 링크

다운로드 주소: https://github.com/tporadowski/redis/releases
여기에서 Redis-x64-xxx.zip 압축 패키지를 D:\Program Files에 다운로드하고, 압축을 푼 후 폴더 이름을 redis로 변경합니다.
다음 내용이 포함된 폴더를 엽니다.
여기에 이미지 설명을 삽입하세요.

2.2 설치 테스트

현재 디렉터리에서 cmd 창을 열고 실행을 시작합니다.

redis-서버.exe redis.windows.conf

편의를 원하시면 시스템 환경변수에 redis 경로를 추가하시면 경로를 다시 입력하실 필요가 없습니다.다음 redis.windows.conf는 생략 가능하며, 생략시 기본 경로가 활성화됩니다. . 입력 후 다음 인터페이스가 표시됩니다:
여기에 이미지 설명을 삽입하세요.
이때 다른 cmd 창을 엽니다. 원래 창을 닫지 마십시오. 그렇지 않으면 서버에 액세스할 수 없습니다.
redis 디렉터리로 전환하고 다음을 실행합니다.

redis-cli.exe -h 127.0.0.1 -p 6379

키-값 쌍을 설정합니다.

myKey abc를 설정하세요

키-값 쌍을 가져옵니다.

마이키 받기

여기에 이미지 설명을 삽입하세요.
테스트 성공

3. Redis에서 계정 비밀번호 변경

서비스 시작 redis-server.exe redis.windows.conf
클라이언트 시작 redis-cli.exe
비밀번호 보기 config get requirepass
비밀번호 설정 config set requirepass system //시스템에 비밀번호 설정
종료
후 다시 로그인 - 클라이언트 redis-cli.exe 시작
다시 로그인 - 비밀번호 인증 시스템 입력
여기에 이미지 설명을 삽입하세요.

4. Redis는 Windows 서비스로 작성되었습니다.

매번 cmd 창을 시작하는 것이 너무 번거로운 것 같은데 이제는 쉽게 시작하기 위해 Windows 서비스로 작성합니다.

redis-server --service-install redis.windows.conf
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

5. .net 코어 - CSRedisCore를 사용하여 Redis 운영

ServiceStack.Redis는 상용 버전으로 무료 버전에는 제한이 있고,
StackExchange.Redis는 무료 버전이지만 .NETCore에서 실행되는 커널에 문제가 있고 시간 초과가 자주 발생하여 당분간 해결할 수 없는 문제가 있습니다
. 2016년에 .NETCore를 지원하고 현재까지 반복하여 낮은 임계값, 고성능 및 고급 파티셔닝 .NETCore redis-cli SDK를 달성했습니다.
v3.0 버전 업데이트에서는 CSRedis의 모든 메서드 이름이 조정되었습니다. redis-cli와 일치합니다.redis-cli에 익숙하다면 명령어 측면에서는 CSRedis를 직접 사용할 수 있어 학습 비용이 많이 절감됩니다.
여기에 이미지 설명을 삽입하세요.
RedisServer 캐시 데이터베이스 인스턴스화 및 연결을 만듭니다.

using CSRedis;
using YS.Common;

namespace YS.Core
{
    
    
    /// <summary>
    /// 创建RedisServer缓存型数据库
    /// 说明:需要读取配置文件,里面有连接字符串
    /// </summary>
    public static class RedisServer
    {
    
    
        public static CSRedisClient? Cache;
        public static CSRedisClient? Sequence;
        public static CSRedisClient? Session;

        public static void Initalize()
        {
    
    
            Cache = new CSRedisClient(AppSettings.Configuration["RedisServer:Cache"]);
            Sequence = new CSRedisClient(AppSettings.Configuration["RedisServer:Sequence"]);
            Session = new CSRedisClient(AppSettings.Configuration["RedisServer:Session"]);
        }
    }
}

작업 수행을 담당하는 RedisCache.cs 보조 클래스


using SqlSugar;
using System;
using System.Collections.Generic;

namespace YS.Core
{
    
    
    /// <summary>
    /// Redis操作方法
    /// 说明:添加键值对、添加json,以及修改删除等
    /// </summary>
    public class RedisCache : ICacheService
    {
    
    
        public void Add<V>(string key, V value)
        {
    
    
            RedisServer.Cache.Set(key, value);
        }

        public void Add<V>(string key, V value, int cacheDurationInSeconds)
        {
    
    
            RedisServer.Cache.Set(key, value, cacheDurationInSeconds);
        }

        public bool ContainsKey<V>(string key)
        {
    
    
            return RedisServer.Cache.Exists(key);
        }

        public V Get<V>(string key)
        {
    
    
            return RedisServer.Cache.Get<V>(key);
        }

        public IEnumerable<string> GetAllKey<V>()
        {
    
    
            return RedisServer.Cache.Keys("Cache:SqlSugarDataCache.*");
        }

        public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
        {
    
    
            if (ContainsKey<V>(cacheKey))
            {
    
    
                return Get<V>(cacheKey);
            }
            else
            {
    
    
                var result = create();
                Add(cacheKey, result, cacheDurationInSeconds);
                return result;
            }
        }

        public void Remove<V>(string key)
        {
    
    
            RedisServer.Cache.Del(key.Remove(0, 6));
        }
    }
}

추천

출처blog.csdn.net/youcheng_ge/article/details/133072163