Redis Release Notes

Redis Server 教育
Redis Developer Course
Redis 定期点検/技術支援
Redis Technical Support
Redis エンタープライズサーバ
Redis Enterprise Server

Redis Release Notes 7

Upgrade Level

  • LOW(낮음): 사용하려는 새로운 기능이 있으면 업그레이드하십시오.
    No need to upgrade unless there are new features you want to use.
  • MODERATE(보통): 서버 업그레이드가 필요하지만 긴급하지는 않습니다.
    Program an upgrade of the server, but it's not urgent.
  • HIGH(높음): 일부 사용자에게 영향을 줄 수 있는 심각한 버그가 있습니다. 가능한 업그레이드하십시오.
    There is a critical bug that may affect a subset of users. Upgrade!
  • CRITICAL(심각): 대부분의 사용자에게 영향을 미치는 심각한 버그가 있습니다. 최대한 빨리 업그레이드하십시오. There is a critical bug affecting MOST USERS. Upgrade ASAP.
  • SECURITY(보안): 보안 수정 사항이 있습니다. There are security fixes in the release.

정보 보안 관련 용어

  • CVE: Common Vulnerabilities and Exposures 공개적으로 알려진 정보 보안 취약점
  • NVD: National Vulnerability Database 국가 취약점 데이터베이스
    CVE에 대한 업데이트는 NVD에 반영됨.
  • NIST: National Institute of Standards and Technology 미국 국립표준기술연구소

Redis 7.0.8 - 2023년 1월 16일(월)        

Upgrade urgency: SECURITY(보안)
Contains fixes to security issues.

Security Fixes 보안 수정
* (CVE-2022-35977) Integer overflow in the Redis SETRANGE and SORT/SORT_RO
  commands can drive Redis to OOM panic.
  SETRANGE, SORT/SORT_RO 명령의 정수 오버플로로 인해 OOM 패닉이 발생할 수 있음
* (CVE-2023-22458) Integer overflow in the Redis HRANDFIELD and ZRANDMEMBER
  commands can lead to denial-of-service
  HRANDFIELD, ZRANDMEMBER 명령의 정수 오버플로로 인해 서비스 거부가 발생할 수 있음

Bug Fixes 버그 수정
* Avoid possible hang when client issues long KEYS, SRANDMEMBER, HRANDFIELD,
  and ZRANDMEMBER commands and gets disconnected by client output buffer limit (#11676)
  클라이언트가 긴 KEYS, SRANDMEMBER, HRANDMEMBER, HRANDFIELD 및 ZRANDMEMBER 명령을 실행하고 
  클라이언트 출력 버퍼 제한으로 연결이 끊어질 때 발생할 수 있는 중단을 방지합니다.
* Make sure that fork child doesn't do incremental rehashing (#11692)
   자식 프로세스가 불필요한 증분 재해싱(incremental rehashing)을 수행하지 않도록 수정했습니다. 
   이것은 getExpire(), dictFind() 함수와 관계있습니다. server.h, server.c
* Fix a bug where blocking commands with a sub-second timeout would block forever (#11688)
   1초 미만의 제한 시간이 있는 차단 명령(예: blpop)이 영원히 차단되는 버그 수정. timeout.c
* Fix sentinel issue if replica changes IP (#11590)
   복제본이 IP를 변경하는 경우 센티넬 문제 수정

Redis 7.0.7 - 2022년 12월 16일(금)        

Upgrade urgency: MODERATE(보통)
Contains fix for a regression in Geo commands.

Bug Fixes 버그 수정
* Fix regression from Redis 7.0.6 in distance replies of Geo commands (#11631)
   GEO 명령에서 거리가 1 미만인 경우 결과에 쓰레기가 포함되는 버그 수정

Redis 7.0.6 - 2022년 12월 12일(월)        

Upgrade urgency: MODERATE(보통)
Contains fixes for a few non-critical or unlikely bugs, and some dramatic optimizations to Geo,
EVAL, and Sorted sets commands.

Potentially Breaking Bug Fixes for new Redis 7.0 features
잠재적 파괴에 대비한 변경
* RM_ResetDataset module API should not clear the functions (#11268)
* RM_Call module API used with the "C" flag to run scripts, would now cause
  the commands in the script to check ACL with the designated user (#10966)
  스크립트를 실행하기 위해 "C" 플래그와 함께 사용되는 RM_Call 모듈 API는 이제 스크립트의 명령이 
  지정된 사용자로 ACL을 확인하도록 합니다.

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Geo commands speedups (#11535, #11522, #11552, #11579)
   Geo 명령 속도 향상
* Fix EVAL command performance regression from Redis 7.0 (#11521, #11541)
   Redis 6.2에 비해서 7.0에서 성능 저하된 EVAL 명령 성능 회복
* Reduce EXPIRE commands performance regression from Redis 7.0 (#11602)
   Redis 6.2에 비해서 7.0에서 성능 저하된 EXPIRE 명령 성능 회복 
   이것은 rewriteClientCommandVector() 함수와 관계있습니다.
* Optimize commands returning double values, mainly affecting zset commands (#11093)
   Double 값을 반환하는 명령 최적화 (ZSet 명령에서 주로 사용)
* Optimize Lua parsing of some command responses (#11556)
   Lua 구문 분석 최적화(성능 향상) src/script_lua.c
   luaReplyToRedisReply() 내에서 addReplySds()와 sdscatprintf()을 addReplyStatusLength()로 변경. 
* Optimize client memory usage tracking operation while client eviction is disabled (#11348)
   클라이언트 제거가 비활성화되어 있으면 클라이언트 메모리 사용량 추적 작업을 최적화합니다.
   
Platform / toolchain support related improvements
플랫폼/툴체인 지원 관련 개선 사항
* Fix compilation on Solaris (#11327)
   SunOS/Solaris에서는 flock() 함수가 없음. 따라서 필요하지 않으므로 사용하지 않게 수정함.  
   cluster.c는 이전 버전에 이미 적용했음. 
   server.c finishShutdown()에서 SunOS가 아닐 경우만 사용하도록 수정 완료.
   
Module API changes
* RM_SetContextUser, RM_SetModuleUserACLString, RM_GetModuleUserACLString (#10966)
* Fix crash in CLIENT_CHANGE event, when the selected database is not 0 (#11500)

Changes in CLI tools 
redis-cli 변경 내용
* redis-benchmark avoid aborting on NOPERM from CONFIG GET (#11096)
   redis-benchmark getRedisConfig() 함수 내부에서 실행되는 CONFIG GET 명령이 실패해도
   benchmark를 계속 실행하도록 수정.  redis-benchmark.c    
   
Bug Fixes 버그 수정
* Avoid hang of diskless replication fork child when parent crashes (#11463)
   자식 프로세스 생성(fork) 된 후 부모 프로세스가 다운(crash) 되면 자식 프로세스가 행(hang) 걸리는 버그 수정.
   rdb.c      rdbSaveToSlavesSockets() 함수에  close(server.rdb_pipe_read) 추가
   server.c  redisFork() 함수에 close(server.child_info_pipe[0]) 추가    
* Fix crash with module API of list iterator and RM_ListDelete (#11383)
* Fix TLS error handling to avoid connection drops on timeouts (#11563)
   시간 초과 시 연결 끊김을 방지하기 위해 TLS 오류 처리 수정
   replication.c  readSyncBulkPayload(), receiveSynchronousResponse() 함수에서 
		strerror()를 connGetLastError()으로 변경
   tls.c 	updateStateAfterSSLIO() 함수 추가   
   TLS(Transport Layer Security), SSL(Secure Sockets Layer)
* Fix runtime changes to cluster-announce-*-port to take effect on the local node too (#10745)
   로컬 노드에도 적용되도록 cluster-announce-*-port에 대한 런타임 변경 사항을 수정합니다.
   cluster.c clusterUpdateMyselfAnnouncedPorts() 추가.
   config.c updateClusterAnnouncedPort() 추가,  createIntConfig()에 updateClusterAnnouncedPort 적용
   대상 파라미터: cluster-announce-port, cluster-announce-bus-port, cluster-announce-tls-port
* Fix sentinel function that compares hostnames if failed resolve (#11419)
   DNS 확인 명령이 실패해도 호스트 이름 비교하는 기능 추가 
   sentinel.c sentinelAddrEqualsHostname() 함수 수정
* Fix MIGRATE with AUTH set to "keys" is getting wrong key names leading to MOVED or ACL errors (#11253)
   MIGRATE 명령에서 auth password가 keys인 경우 발생하는 오류 수정
   src/commands.c, src/commands/migrate.json, src/db.c migrateGetKeys() 수정.
   
Fixes for issues in previous releases of Redis 7.0
Redis 7.0 이전 릴리스의 문제 수정
* Fix command line startup --sentinel problem (#11591)
* Fis missing FCALL commands in monitor (#11510)
* Fix CLUSTER SHARDS showing empty hostname (#11297)
* Replica that asks for rdb-only could have missed the EOF and hang (#11296)

Redis 7.0.5 - 2022년 9월 22일(수)        

Upgrade urgency: SECURITY(보안)
Contains fixes to security issues.

Security Fixes 보안 수정
* (CVE-2022-35951) Executing a XAUTOCLAIM command on a stream key in a specific
  state, with a specially crafted COUNT argument, may cause an integer overflow,
  a subsequent heap overflow, and potentially lead to remote code execution.
  The problem affects Redis versions 7.0.0 or newer
  [reported by Xion (SeungHyun Lee) of KAIST GoN].

Module API changes
* Fix RM_Call execution of scripts when used with M/W/S flags to properly
  handle script flags (#11159)
* Fix RM_SetAbsExpire and RM_GetAbsExpire API registration (#11025, #8564)

Bug Fixes 버그 수정
* Fix a hang when eviction is combined with lazy-free and maxmemory-eviction-tenacity is set to 100 (#11237)
* Fix a crash when a replica may attempt to set itself as its master as a result of a manual failover (#11263)
* Fix a bug where a cluster-enabled replica node may permanently set its master's hostname to '?' (#10696)
* Fix a crash when a Lua script returns a meta-table (#11032)

Fixes for issues in previous releases of Redis 7.0
Redis 7.0 이전 릴리스의 문제 수정
* Fix redis-cli to do DNS lookup before sending CLUSTER MEET (#11151)
* Fix crash when a key is lazy expired during cluster key migration (#11176)
* Fix AOF rewrite to fsync the old AOF file when a new one is created (#11004)
* Fix some crashes involving a list containing entries larger than 1GB (#11242)
* Correctly handle scripts with a non-read-only shebang on a cluster replica (#11223)
* Fix memory leak when unloading a module (#11147)
* Fix bug with scripts ignoring client tracking NOLOOP (#11052)
* Fix client-side tracking breaking protocol when FLUSHDB / FLUSHALL / SWAPDB is used inside 
   MULTI-EXEC (#11038)
* Fix ACL: BITFIELD with GET and also SET / INCRBY can be executed with read-only key permission (#11086)
* Fix missing sections for INFO ALL when also requesting a module info section (#11291)

Redis 7.0.4 - 2022년 7월 18일(월)        

Upgrade urgency: SECURITY(보안) 
Contains fixes to security issues.

Security Fixes 보안 수정
* (CVE-2022-31144) A specially crafted XAUTOCLAIM command on a stream
  key in a specific state may result with heap overflow, and potentially
  remote code execution. The problem affects Redis versions 7.0.0 or newer.

Redis 7.0.3 - 2022년 7월 11일(월)        

Upgrade urgency: MODERATE(보통)
Specifically if you're using a previous release of Redis 7.0, contains fixes for bugs in previous 7.0 releases.
특히 Redis 7.0의 이전 릴리스를 사용하는 경우, 이전 7.0 릴리스의 버그에 대한 수정 사항이 포함되어 있습니다.

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Optimize zset conversion on large ZRANGESTORE (#10789)
* Optimize the performance of sending PING on large clusters (#10624)
* Allow for faster restart of Redis in cluster mode (#10912)

INFO fields and introspection changes
INFO 필드 및 내성 변경 사항
* Add missing sharded pubsub keychannel count to CLIENT LIST (#10895)
* Add missing pubsubshard_channels field in INFO STATS (#10929)

Module API changes
* Add RM_StringToULongLong and RM_CreateStringFromULongLong (#10889)
* Add RM_SetClientNameById and RM_GetClientNameById (#10839)

Changes in CLI tools
redis-cli 변경 내용
* Add missing cluster-port support to redis-cli --cluster (#10344)

Other General Improvements
기타 일반 개선 사항
* Account sharded pubsub channels memory consumption (#10925)
* Allow ECHO in loading and stale modes (#10853)
* Cluster: Throw -TRYAGAIN instead of -ASK on migrating nodes for multi-key
  commands when the node only has some of the keys (#9526)

Bug Fixes 버그 수정
* TLS: Notify clients on connection shutdown (#10931)
* Fsync directory while persisting AOF manifest, RDB file, and config file (#10737)
* Script that made modification will not break with unexpected NOREPLICAS error (#10855)
* Cluster: Fix a bug where nodes may not acknowledge a CLUSTER FAILOVER TAKEOVER
  after a replica reboots (#10798)
* Cluster: Fix crash during handshake and cluster shards call (#10942)

Fixes for issues in previous releases of Redis 7.0
Redis 7.0 이전 릴리스의 문제 수정
* TLS: Fix issues with large replies (#10909)
* Correctly report the startup warning for vm.overcommit_memory (#10841)
* redis-server command line allow passing config name and value in the same argument (#10866)
* Support --save command line argument with no value for backwards compatibility (#10866)
* Fix CLUSTER RESET command regression requiring an argument (#10898)

Redis 7.0.2 - 2022년 6월 12일(일)        

Upgrade urgency: MODERATE(보통)
특히 Redis 7.0의 이전 릴리스를 사용하는 경우, 이전 7.0 릴리스의 버그에 대한 수정 사항이 포함되어 있습니다.

Bug Fixes 버그 수정
* Fixed SET and BITFIELD commands being wrongly marked movablekeys (#10837)
  Regression in 7.0 possibly resulting in excessive roundtrip from cluster clients.
  SET 및 BITFIELD 명령이 이동키로 잘못 표시되는 문제 수정. (#10837)  
  7.0의 회귀로 인해 클러스터 클라이언트에서 과도한 왕복이 발생할 수 있습니다.
   movablekeys  CMD_MOVABLE_KEYS  commands.c
   get_keys_function -> 이런 7.0.2, 7.0.1에 function은 없음. 
   populateCommandMovableKeys -> 7.0.2에서 삭재됨. 
   SET과 BITFIELD 명령만 CMD_KEY_VARIABLE_FLAGS가 지정되어 있음. 
	server.c 
		populateCommandLegacyRangeSpec(c);
		populateCommandMovableKeys(c);  7.0.2에서 function을 삭제했음. 

* Fix crash when /proc/sys/vm/overcommit_memory is inaccessible (#10848)
  Regression in 7.0.1 resulting in crash on startup on some configurations.
  /proc/sys/vm/overcommit_memory에 액세스할 수 없는 경우 비정상 종료 수정. (#10848)
  7.0.1의 회귀로 인해 일부 구성에서 시작 시 비정상 종료 발생했습니다.
   syscheck.c checkOvercommit() 
   Redis server start 시 overcommit이 0으로 되어 있을 경우 로그 메시지에서 경고(Warning)을 뺐음.
   
	Verify overcommit is enabled.
	When overcommit memory is disabled Linux will kill the forked child of a background save
	if we don't have enough free memory to satisfy double the current memory usage even though
	the forked child uses copy-on-write to reduce its actual memory usage. 

	오버커밋이 활성화되어 있는지 확인합니다.
    오버커밋 메모리가 비활성화되면 Linux는 포크된 자식이 실제 메모리 사용량을 줄이기 위해 
    copy-on-write를 사용하더라도 현재 메모리 사용량의 두 배를 충족하기에 충분한 여유 메모리가 없으면 
    백그라운드 저장의 분기된 자식을 종료합니다.

	[BUG] redis-7.0.1 syscheck.c  -> 7.0.3에서 수정 예정 
		if (atoi(buf)) {  "WARNING msg" } 
		-> 아래와 같이 수정해야 합니다. 
		if (atoi(buf) == 0) {  "msg" } 
		Issue: #10926   redisgate@gmail.com 

Redis 7.0.1 - 2022년 6월 8일(수)        

Upgrade urgency: MODERATE(보통) 
specifically if you're using a previous release of Redis 7.0, contains some behavior changes for 
new 7.0 features and important fixes for bugs in previous 7.0 releases.
특히 Redis 7.0의 이전 릴리스를 사용하는 경우에는 새로운 7.0 기능에 대한 몇 가지 동작 변경 사항과 
이전 7.0 릴리스의 버그에 대한 중요한 수정 사항이 포함되어 있습니다.

Improvements 개선
* Add warning for suspected slow system clocksource setting
  Add --check-system command line option. (#10636)
  의심되는 느린 시스템 clocksource 설정에 대한 경고 추가
   --check-system 명령줄 옵션을 추가합니다. (#10636)  
   syscheck.h, syscheck.c 추가: server.c에서 check하던 기능 중 일부를 이 파일로 뺐다. 
   
   server.c main()  redis server를 시작할 때 "--check-system" 옵션을 사용해야만 
        리눅스 설정을 확인하고 로그를 남김. 
		
		server.c  은 항상한다. 기존과 같이 아래 3개는 항상한다. 
			checkTcpBacklogSettings() "/proc/sys/net/core/somaxconn"   server.tcp_backlog 511   -> 8192
			checkOvercommit()
			checkTHPEnabled() 
		
		if (strcmp(argv[1], "--check-system") == 0) {
            exit(syscheck() ? 0 : 1);
		}			
		overcommit, thp 
		check checks[] = {
		#ifdef __linux__
			{.name = "slow-clocksource", .check_fn = checkClocksource},
			{.name = "xen-clocksource", .check_fn = checkXenClocksource},  AWS ec2 
			{.name = "overcommit", .check_fn = checkOvercommit},
			{.name = "THP", .check_fn = checkTHPEnabled},
		#ifdef __arm64__
			{.name = "madvise-free-fork-bug", .check_fn = checkLinuxMadvFreeForkBug},
		#endif
		#endif
			{.name = NULL, .check_fn = NULL}
		};

----------------------------------------------------------------------------------
checkClocksource() 
----------------------------------------------------------------------------------
  Verify our clokcsource implementation doesn't go through a system call (uses vdso).
  Going through a system call to check the time degrades Redis performance. 
  clokcsource 구현이 시스템 호출을 거치지 않는지 확인합니다(vdso 사용).
  시스템 호출을 통해 시간을 확인하면 Redis 성능이 저하됩니다.  
  
  clock_gettime() busy loop of 5 times system tick (for a system_hz of 100 this is 50ms). 
  Using system_hz is required to ensure accurate measurements from getrusage().
  If our clocksource is configured correctly (vdso) this will result in no system calls.
  If our clocksource is inefficient it'll waste most of the busy loop in the kernel. 
  
  clock_gettime() 시스템 틱의 5번 바쁜 루프(system_hz가 100인 경우 50ms임).
  getrusage()에서 정확한 측정을 보장하려면 system_hz를 사용해야 합니다.
  클럭 소스가 올바르게 구성되어 있으면(vdso) 시스템 호출이 발생하지 않습니다.
  클럭 소스가 비효율적이면 커널에서 대부분의 바쁜 루프를 낭비하게 됩니다.
  
  If more than 10% of the process time was in system calls we probably have an inefficient clocksource, 
  print a warning.
  프로세스 시간의 10% 이상이 시스템 호출에 있었다면 아마도 비효율적인 클록 소스가 있을 것입니다. 
  경고를 출력합니다.

  sds avail = read_sysfs_line("/sys/devices/system/clocksource/clocksource0/available_clocksource"); 
		-> tsc hpet acpi_pm
  sds curr = read_sysfs_line("/sys/devices/system/clocksource/clocksource0/current_clocksource"); 
		-> tsc
		CentOS 7.5의 경우 avail은 tsc, hpet, acpi_pm가 있고 현재 curr tsc로 설정되어 있다.
		Time Stamp Counter (TSC)
		High Precision Event Timer (HPET)
		ACPI Power Management Timer (ACPI PMT)
		Real Time Clock (RTC)
		Programmable Interrupt Timer (PIT)
		
	Slow system clocksource detected. This can result in degraded performance. 
	Consider changing the system's clocksource. 
	Current clocksource: %s. Available clocksources: %s. 
	For example: run the command 
		'echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource' as root. 
	To permanently change the system's clocksource you'll need to set the 
		'clocksource=' kernel command line parameter.

	느린 시스템 클록 소스가 감지되었습니다. 이로 인해 성능이 저하될 수 있습니다.
	시스템의 클록 소스 변경을 고려하십시오.
	현재 클록 소스: %s. 사용 가능한 클록 소스: %s.
	예: 'echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource' 명령을 
		루트로 실행합니다.
	시스템의 clocksource를 영구적으로 변경하려면 'clocksource=' 커널 명령줄 매개변수를 설정해야 합니다.
	현재 설정 변경: echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource
	                   확인: dmesg | less  -> clocksource: Switched to clocksource tsc						  
	영구 설정 변경:  root -> RedHat/CentOS 6/7/8 
	  1) vi /etc/default/grub
	  2) GRUB_CMDLINE_LINUX에 "clocksource=tsc tsc=reliable"를 추가한다.
	  3) grub2-mkconfig -o /boot/grub2/grub.cfg
	  설명 page
		https://aws.amazon.com/ko/premiumsupport/knowledge-center/manage-ec2-linux-clock-source/
		https://access.redhat.com/solutions/18627
		https://github.com/redis/redis/pull/10636

----------------------------------------------------------------------------------
checkXenClocksource()  AWS ec2 
----------------------------------------------------------------------------------
  Verify we're not using the `xen` clocksource. 
  The xen hypervisor's default clocksource is slow and affects Redis's performance. 
  This has been measured on ec2 xen based instances. ec2 recommends using the non-default tsc 
  clock source for these instances. 
  
  xen 클록 소스를 사용하고 있지 않은지 확인합니다. 
  xen 하이퍼바이저의 기본 클록 소스는 느리고 Redis의 성능에 영향을 미칩니다.
  이는 ec2 xen 기반 인스턴스에서 측정되었습니다. 
  ec2는 이러한 인스턴스에 대해 기본이 아닌 tsc 클럭 소스를 사용할 것을 권장합니다.
  
  Your system is configured to use the 'xen' clocksource which might lead to degraded performance. 
  Check the result of the [slow-clocksource] system check: 
  run 'redis-server --check-system' to check if the system's clocksource isn't degrading performance.
  
  시스템이 'xen' 클록 소스를 사용하도록 구성되어 성능이 저하될 수 있습니다.
  [slow-clocksource] 시스템 검사 결과를 확인하십시오.
  'redis-server --check-system'을 실행하여 시스템의 클럭 소스가 성능을 저하시키지 않는지 확인하십시오.
----------------------------------------------------------------------------------

* Allow read-only scripts (*_RO commands, and ones with `no-writes` flag)
  during CLIENT PAUSE WRITE (#10744)
  CLIENT PAUSE WRITE 동안 읽기 전용 스크립트 허용
  
* Add `readonly` flag in COMMAND command for EVAL_RO, EVALSHA_RO and FCALL_RO (#10728)
  EVAL_RO, EVALSHA_RO와 FCALL_RO에 대한 COMMAND 명령에 'readonly' 플래그 추가. (#10728)

* redis-server command line arguments now accept one string with spaces for multi-arg configs (#10660)
  redis-server 명령줄 인수는 이제 다중 인수 구성을 위한 공백이 있는 하나의 문자열을 허용합니다. (#10660)
  ex) src/redis-server --shutdown-on-sigint nosave force now

Potentially Breaking Changes 
잠재적 파괴에 대비한 변경
* Omitting a config option value in command line argument no longer works (#10660)
  명령줄 인수에서 구성 옵션 값을 생략해도 더 이상 작동하지 않습니다. (#10660)
* Hide the `may_replicate` flag from the COMMAND command response (#10744)
  COMMAND 명령 응답에서 may_replicate 플래그를 숨깁니다. (#10744)

Potentially Breaking Changes for new Redis 7.0 features
새로운 Redis 7.0 기능에 대한 잠재적 파괴에 대비한 변경
* Protocol: Sharded pubsub publish emits `smessage` instead of `message` (#10792)
   Protocol: 분할된 pubsub 게시는 'message' 대신 'smessage'를 내보냅니다. (#10792)
* CLUSTER SHARDS returns slots as RESP integers, not strings (#10683)
   CLUSTER SHARDS는 슬롯을 문자열이 아닌 RESP 정수로 반환합니다. (#10683)
* Block PFCOUNT and PUBLISH in read-only scripts (*_RO commands, and no-writes) (#10744)
   읽기 전용 스크립트에서 PFCOUNT 및 PUBLISH 차단(*_RO 명령 및 쓰기 금지) (#10744)
* Scripts that declare the `no-writes` flag are implicitly `allow-oom` too (#10699)
   'no-writes' 플래그를 선언하는 스크립트도 암시적으로 'allow-oom'입니다. (#10699)

Changes in CLI tools
redis-cli 변경 내용
* redis-cli --bigkeys, --memkeys, --hotkeys, --scan. Finish nicely after Ctrl+C (#10736)

Platform / toolchain support related improvements
플랫폼/툴체인 지원 관련 개선 사항
* Support tcp-keepalive config interval on MacOs (#10667)
* Support RSS metrics on Haiku OS (#10687)

INFO fields and introspection changes
INFO 필드 및 내성 변경 사항
* Add isolated network metrics for replication. (#10062, #10810)
   복제를 위해 격리된 네트워크 메트릭을 추가합니다. (#10062, #10810)
   info stats -> fullsync 통계 추가 

Module API changes
* Add two more new checks to RM_Call script mode (#10786)
* Add new RM_Call flag to let Redis automatically refuse `deny-oom` commands (#10786)
* Add module API RM_MallocUsableSize (#10795)
* Add missing REDISMODULE_NOTIFY_NEW (#10688)
* Fix cursor type in RedisModuleScanCursor to handle more than 2^31 elements (#10698)
* Fix RM_Yield bugs and RM_Call("EVAL") OOM check bug (#10786)
* Fix bugs in enum configs with overlapping bit flags (#10661)

Bug Fixes 버그 수정
* FLUSHALL correctly resets rdb_changes_since_last_save INFO field (#10691)
   FLUSHALL은 rdb_changes_since_last_save INFO 필드를 올바르게 재설정합니다. (#10691)
* FLUSHDB is now propagated to replicas / AOF, even if the db is empty (#10691)
   FLUSHDB는 이제 db가 비어 있는 경우에도 복제본/AOF로 전파됩니다. (#10691)
* Replica fail and retry the PSYNC if the master is unresponsive (#10726)
   복제본이 실패하고 마스터가 응답하지 않으면 PSYNC를 다시 시도합니다. (#10726)
* Fix ZRANGESTORE crash when zset_max_listpack_entries is 0 (#10767)
   zset_max_listpack_entries가 0일 때 ZRANGESTOR 충돌을 수정합니다. (#10767)

Fixes for issues in previous releases of Redis 7.0
Redis 7.0 이전 릴리스의 문제 수정
* CONFIG REWRITE could cause a config change to be dropped for aliased configs (#10811)
   CONFIG REWRITE로 인해 별칭 구성에 대한 구성 변경이 삭제될 수 있습니다. (#10811)
* CONFIG REWRITE would omit rename-command and include lines (#10761)
   CONFIG REWRITE는 이름 바꾸기 명령을 생략하고 행을 포함합니다. (#10761)
   NOTE: Affected users who used Redis 7.0.0 to rewrite their configuration file
   should review and fix the file.
   Redis 7.0.0을 사용하여 구성 파일을 다시 작성한 영향을 받는 사용자는 파일을 
   검토하고 수정해야 합니다.  
* Fix broken protocol after MISCONF (persistence) error (#10786)
   수정: MISCONF(지속성) 오류 후 깨진 프로토콜을 수정합니다. (#10786)
* Fix --save command line regression (#10690)
   수정: --save 명령줄 회귀 수정. (#10690)
* Fix possible regression around TLS config changes. re-load files even if the
   file name didn't change. (#10713)
   TLS 구성 변경에 대한 가능한 회귀 수정. 파일 이름이 변경되지 않은 경우에도 파일을 다시 로드합니다. 
* Re-add SENTINEL SLAVES command, missing in redis 7.0 (#10723)
* BZMPOP gets unblocked by non-key args and returns them (#10764)
* Fix possible memory leak in XADD and XTRIM (#10753)
   수정: XADD 및 XTRIM에서 가능한 메모리 누수를 수정합니다. (#10753)

Redis 7.0.0 - 2022년 4월 27일(수)        

Upgrade urgency: SECURITY(보안) 
보안 문제에 대한 수정 사항이 포함되어 있습니다.

Security Fixes 보안 수정
* (CVE-2022-24736) An attacker attempting to load a specially crafted Lua script
  can cause NULL pointer dereference which will result with a crash of the
  redis-server process. This issue affects all versions of Redis.
  [reported by Aviv Yahav].
	특수하게 조작된 Lua 스크립트를 로드하려는 공격자는 NULL 포인터 역참조를 일으켜 
	redis-server 프로세스의 crash을 일으킬 수 있습니다.
	이 문제는 모든 Redis 버전에 영향을 미칩니다.
  
* (CVE-2022-24735) By exploiting weaknesses in the Lua script execution
  environment, an attacker with access to Redis can inject Lua code that will
  execute with the (potentially higher) privileges of another Redis user.
  [reported by Aviv Yahav].
	Lua 스크립트 실행 환경의 약점을 악용하여 Redis에 액세스할 수 있는 공격자는 
	다른 Redis 사용자의 (잠재적으로 더 높은) 권한으로 실행할 Lua 코드를 삽입할 수 있습니다.

New Features 새로운 기능
* Keyspace event for new keys (#10512) 
	-> Keyspace event 확인 필요 

Command replies that have been extended.
확장된 명령 응답
* COMMAND DOCS shows deprecated_since field in command args (#10545)
   COMMAND DOCS는 명령 인수에 deprecated_since 필드를 표시합니다. (#10545)
* COMMAND DOCS shows module name where applicable (#10544)
   COMMAND DOCS는 해당되는 경우 모듈 이름을 표시합니다. (#10544)

Potentially Breaking Changes
잠재적 파괴에 대비한 변경
* Replicas panic when they fail writing persistence (#10504)
   지속성 쓰기 실패 시 복제본 패닉. (#10504)
* Prevent cross slot operations in functions and scripts with shebang (#10615)
   shebang을 사용하여 함수 및 스크립트에서 교차 슬롯 작업 방지. (#10615)
* Rephrased some error responses about invalid commands or args (#10612)
   유효하지 않은 명령 또는 인수에 대한 일부 오류 응답을 수정했습니다. (#10612).
* Lua scripts do not have access to the print() function (#10651)
   Lua 스크립트는 print() 함수에 접근할 수 없습니다. (#10651)

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Speed optimization in streams (#10574)
   스트림의 속도 최적화. (#10574)
* Speed optimization in command execution pipeline (#10502)
   명령 실행 파이프라인의 속도 최적화. (#10502)
* Speed optimization in listpack encoded sorted (#10486)
   정렬된 listpack 인코딩의 속도 최적화
* Speed optimization in latency tracking at INFO (relevant for 7.0 RCs) (#10606)
   INFO에서 latency(지연) 추적의 속도 최적화. (#10606)
* Speed optimization when there are many replicas (relevant for 7.0 RCs) (#10588)
   복제본이 많을 때 속도 최적화. (#10588)

New configuration options
새 구성 설정 옵션
* Allow ignoring disk persistence errors on replicas (#10504)
   복제본의 디스크 지속성 오류 무시 허용. (#10504)
* Allow abort with panic when replica fails to execute a command sent by the master (#10504)
   복제본이 마스터에서 보낸 명령을 실행하지 못하면 패닉으로 중단 허용. (#10504)
* Allow configuring shutdown flags of SIGTERM and SIGINT (#10594)
   SIGTERM 및 SIGINT의 종료 플래그 구성 허용. (#10594)
* Allow attaching an operating system-specific identifier to Redis sockets (#10349)
   Redis 소켓에 운영 체제별 식별자 연결 허용. (#10349)

Module API changes
* Add argument specifying ACL reason for module log entry (#10559)
   Breaking API compatibility with 7.0 RCs
* Add the deprecated_since field in command args of COMMAND DOCS (#10545)
   Breaking API/ABI compatibility with 7.0 RCs
* Add module API flag for using enum configs as bit flags (#10643)
* Add RM_PublishMessageShard (#10543)
* Add RM_MallocSizeString, RM_MallocSizeDict (#10542)
* Add RM_TryAlloc (#10541)

Bug Fixes 버그 수정
* Replica report disk persistence errors in PING (#10603)
   복제본이 PING에서 디스크 지속성 오류를 보고함. (#10603)
   server.c processCommand() pingCommand -> serverPanic() or serverLog()
* Fixes around rejecting commands on replicas and AOF when they must be respected (#10603)
   복제본 및 AOF가 존중되어야 할 때 명령을 거부하는 문제 수정. (#10603)
* Durability fixes for appendfsync=always policy (#9678)
   appendfsync=always 정책에 대한 내구성 수정. (#9678)

Fixes for issues in previous release candidates of Redis 7.0
Redis 7.0의 이전 릴리스 후보 문제 수정
* Fix possible crash on CONFIG REWRITE (#10598)
   CONFIG REWRITE 시 비정상 종료 가능성 수정. (#10598)
* Fix regression not aborting transaction on errors (#10612)
   오류 발생 시 트랜잭션을 중단하지 않는 회귀 수정. (#10612)
* Fix auto-aof-rewrite-percentage based AOFRW trigger after restart (#10550)
   재시작 후 auto-aof-rewrite-percentage 기반 AOFRW 트리거 수정. (#10550)
* Fix bugs when AOF enabled after startup, in case of failure before the first rewrite completes (#10616)
   첫 번째 다시 쓰기가 완료되기 전에 실패한 경우 시작 후 AOF를 활성화할 때 버그 수정. (#10616)
* Fix RM_Yield module API bug processing future commands of the current client (#10573)
   현재 클라이언트의 향후 명령을 처리하는 RM_Yield 모듈 API 버그 수정. (#10573)

Redis 7.0 RC3 - 2022년 4월 5일(화)      

New administrative and introspection commands and command arguments
새로운 관리 및 내부 검사 명령과 명령 인수
* CLUSTER SHARDS command deprecates CLUSTER SLOTS (#10293)
   CLUSTER SHARDS: CLUSTER SLOTS 명령를 더 이상 사용하지 않습니다. (#10293)

Potentially Breaking Changes
잠재적 파괴에 대비한 변경
* CONFIG GET response returned in a non-deterministic order.
   It's possible that a client was relying on configs order (#10323)
   CONFIG GET 응답이 비결정적 순서로 반환되었습니다.
   클라이언트가 구성 순서에 의존하고 있을 수 있습니다. (#10323)
* SORT / SORT_RO commands reject keys access patterns in GET and BY if ACL
   doesn't grant the command full keyspace access (#10340)
   SORT / SORT_RO 명령은 ACL이 명령에 전체 키스페이스 액세스 권한을 부여하지 않는 경우 
   GET 및 BY에서 키 액세스 패턴을 거부합니다. (#10340)  
* FUNCTION LOAD command introduced in 7.0-RC1 was stripped of the ENGINE, and
   NAME arguments which are now part of the script itself. The DESCRIPTION
   argument was completely removed (#10500)
   7.0-RC1에 도입된 FUNCTION LOAD 명령은 이제 스크립트 자체의 
   일부인 ENGINE 및 NAME 인수에서 제거되었습니다. 
   DESCRIPTION 인수가 완전히 제거되었습니다. (#10500)  
* Set disable-thp config to be immutable (#10409)
   disable-thp 구성을 변경할 수 없도록 설정. (#10409)

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Optimize performance and memory usage on replicas (#10413)
   복제본의 성능 및 메모리 사용량 최적화. (#10413)
* A faster and more robust code of zslRandomLevel using RAND_MAX (#5539)
   RAND_MAX를 사용하는 zslRandomLevel의 더 빠르고 강력한 코드. (#5539)

Changes in CLI tools
redis-cli 변경 내용
* redis-cli: Use exit code 1 on error (#10468)
* redis-cli: Do DNS lookup before sending CLUSTER MEET (#10436)
* redis-benchmark: Fix --cluster with IPv6. (#10393)
* redis-cli: Better --json Unicode support and --quoted-json (#10286)

INFO fields and introspection changes
INFO 필드 및 내성 변경 사항
* MEMORY STATS: Show cluster.links memory usage (#10302)
  MEMORY STATS: cluster.links 메모리 사용량 표시. (#10302)

Module API changes
* APIs for exposing module configs to config file and CONFIG command (#10285)
* Add an event notifying about configuration changes (#10311)
* Add API for redacting command arguments from SLOWLOG and MONITOR (#10425)
* RM_Call: new flags for script mode compatibility, no writes, and error replies (#10372)

Bug Fixes 버그 수정
* Sentinel: Fix no reconnect after auth-pass is changed (#10400)
   Sentinel: auth-pass 변경 후 재접속이 되지 않는 문제 수정. (#10400)
* Cluster: Fix race condition: Turn into replica on SETSLOT (#10489, #10381)
   Cluster: 경쟁 조건 수정: SETSLOT에서 복제본으로 전환. (#10489, #10381)
* XREADGROUP: Unblock client when the stream key is deleted (#10306)
   XREADGROUP: 스트림 키 삭제 시 클라이언트 차단 해제. (#10306)

Fixes for issue in previous release candidates of Redis 7.0
Redis 7.0의 이전 릴리스 후보 문제 수정
* ACL DRYRUN does not validate the verified command args. (#10405)
   ACL DRYRUN은 검증된 명령 인수를 검증하지 않습니다. (#10405)
* ACL DRYRUN returns the tested common permission error (#10359)
   ACL DRYRUN은 테스트된 공통 권한 오류를 반환합니다. (#10359)
* Incorrect parsing of hostname information from nodes.conf (#10435)
   nodes.conf에서 호스트 이름 정보의 잘못된 구문 분석. (#10435)
* BITSET and BITFIELD SET should propagate even if just length changed (#10459)
   BITSET 및 BITFIELD SET은 길이만 변경되어도 전파되어야 함. (#10459)
* SHUTDOWN, Fix a possible crash when the shutdown was aborted (#10440)
   SHUTDOWN, 종료가 중단되었을 때 발생할 수 있는 crash(비정상 종료) 수정. (#10440)
* Script should not allow may-replicate commands when client pause write (#10364)
   클라이언트가 쓰기를 일시 중지할 때 스크립트에서 may-replicate 명령을 허용하지 않아야 함. (#10364)
* Optimization tracking memory usage from i/o threads. (#10401)
   I/O 스레드에서 메모리 사용량을 추적하는 최적화. (#10401)
* Initialize help when using redis-cli help or redis-cli ? (#10382)
   redis-cli help 또는 redis-cli ? 사용 시 도움말 초기화. (#10382)
* Dismiss COW of client output buffer now that it's dynamic (#10371)
   동적이므로 클라이언트 출력 버퍼의 COW를 해제합니다. (#10371).
* Fix memory corruption when EVAL fails before being processed (#10519)
   EVAL이 처리되기 전에 실패할 때 메모리 손상 수정. (#10519)

Redis 7.0 RC2 - 2022년 2월 28일(월)      

New Features 새로운 기능
* Add stream consumer group lag tracking and reporting (#9127)
   스트림 소비자 그룹 지연 추적 및 보고 추가. (#9127)
* Add API for functions and eval Lua scripts to check ACL explicitly (#10220)
   ACL을 명시적으로 확인하기 위한 함수 및 평가 Lua 스크립트용 API 추가. (#10220)

New user commands or command arguments
새 사용자 명령 또는 인수
* COMMAND GETKEYSANDFLAGS sub-command (#10237)
   COMMAND GETKEYSANDFLAGS 하위 명령. (#10237)
* INFO command can take multiple section arguments (#6891)
   INFO 명령은 여러 섹션 인수를 사용할 수 있습니다. (#6891)
* XGROUP CREATE and SETID: new ENTRIESREAD optional argument (#9127)
   XGROUP CREATE와 SETID: 새로운 ENTRIESREAD 선택적 인수. (#9127)
* XSETID new ENTRIESADDED and MAXDELETEDID optional arguments (#9127)
   XSETID 새 ENTRIESADDED와 MAXDELETEDID 선택적 인수. (#9127)

Command replies that have been extended
확장된 명령 응답
* XINFO reports consumer group lag and a few other fields (#9127)
   XINFO는 소비자 그룹 지연 및 기타 몇 가지 필드를 보고합니다. (#9127)
* XAUTOCLAIM returns a new element with a list of deletes IDs (#10227)
   XAUTOCLAIM은 삭제 ID 목록과 함께 새 요소를 반환합니다. (#10227)

Potentially Breaking Changes
잠재적 파괴에 대비한 변경
* X[AUTO]CLAIM skips deleted entries instead of replying with Nil, and deletes
   them from the pending entry list (#10227)
   X[AUTO]CLAIM은 Nil로 회신하는 대신 삭제된 항목을 건너뛰고 보류 중인 항목 목록에서 삭제합니다. (#10227)
* Fix messed up error codes returned from EVAL scripts (#10218, #10329)
   EVAL 스크립트에서 반환된 엉망인 오류 코드 수정. (#10218, #10329)
* COMMAND INFO, Renames key-spec "CHANNEL" flag to be "NOT_KEY" (#10299)
   COMMAND INFO, 키 사양 "CHANNEL" 플래그의 이름을 "NOT_KEY"로 바꿉니다. (#10299)

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Reduce system calls and small packets for client replies (#9934)
   클라이언트 응답에 대한 시스템 호출과 작은 패킷 감소. (#9934)
* Reduce memory usage of stale clients (#9822)
   오래된 클라이언트의 메모리 사용량 감소. (#9822)
* Fix regression in Z[REV]RANGE commands (by-rank) introduced in Redis 6.2 (#10337)
   Redis 6.2에 도입된 Z[REV]RANGE 명령(순위별)의 회귀 수정. (#10337)

Changes in CLI tools 
redis-cli 변경 내용
* Adapt redis-check-aof tool for Multi Part AOF (#10061)
   멀티 파트 AOF에 대한 redis-check-aof 도구 조정. (#10061)
* Enable redis-benchmark to use RESP3 protocol mode (#10335)
   RESP3 프로토콜 모드를 사용하려면 redis-benchmark 활성화(#10335)

Platform / toolchain support related improvements
플랫폼/툴체인 지원 관련 개선 사항
* Fix OpenSSL 3.0.x related issues (#10291)
   OpenSSL 3.0.x 관련 문제 수정. (#10291)

INFO fields and introspection changes
INFO 필드 및 내성 변경 사항
* COMMAND INFO key-specs has new variable_flags flag (#10237, #10148)
   COMMAND INFO key-specs에 새로운 variable_flags 플래그 추가. (#10237, #10148).
* INFO stats: add aof_rewrites and rdb_snapshots counters (#10178)
   INFO stats: aof_rewrites와 rdb_snapshots 카운터 추가. (#10178)
* INFO stats: add reply_buffer_shrinks and reply_buffer_expends (#9822)
   INFO stats: reply_buffer_shrinks와 reply_buffer_expends 추가. (#9822)
* INFO modules: add no-implicit-signal-modified module option (#10284)
   INFO modules: no-implicit-signal-modified 모듈 옵션 추가. (#10284)

Module API changes
* Add RM_SetCommandInfo API to set command metadata for the new COMMAND
   introspection features and ACL key permissions (#10108)
* Add RM_KeyAtPosWithFlags and RM_GetCommandKeysWithFlags APIs (#10237)
* Add getchannels-api command flag and RM_IsChannelsPositionRequest,
   RM_ChannelAtPosWithFlags APIs (#10299)
* Change RM_ACLCheckChannelPermissions and RM_ACLCheckKeyPermissions APIs
   (released in RC1) to take different flags (#10299)
* Fix RM_SetModuleOptions flag collision. Bug in 7.0 RC1 header file, modules
   that used OPTIONS_HANDLE_REPL_ASYNC_LOAD will mess up key invalidations (#10284)

Bug Fixes 버그 수정
* Modules: Fix thread safety violation when a module thread adds an error reply, broken in 6.2 (#10278)
   Modules: 모듈 스레드가 6.2에서 깨진 오류 응답을 추가할 때 스레드 안전 위반을 수정합니다. (#10278)
* Lua: Fix Eval scripts active defrag, broken 7.0 in RC1 (#10271)
   Lua: Eval 스크립트 활성 조각 모음 수정, RC1에서 7.0 손상. (#10271)
* Fix geo search bounding box check causing missing results (#10018)
   결과가 누락되는 geo 검색 경계 상자 확인 수정. (#10018)
* Lua: Add checks for min-slave-* configs when evaluating Lua scripts and Functions (#10160)
   Lua: Lua 스크립트 및 함수를 평가할 때 min-slave-* 구성에 대한 검사 추가. (#10160)
* Modules: Prevent crashes and memory leaks when MODULE UNLOAD is used on module with 
   a pending timer (#10187)
   Modules: 보류 중인 타이머가 있는 모듈에서 MODULE UNLOAD를 사용할 때 비정상 종료와 메모리 누수 방지. 
    (#10187)
* Fix error stats and failed command stats for blocked clients (#10309)
   차단된 클라이언트에 대한 오류 통계 및 실패한 명령 통계 수정. (#10309)
* Lua/Modules: Fix missing and duplicate error stats for scripts and modules (#10329, #10278)
   Lua/Modules: 스크립트 및 모듈의 누락 및 중복 오류 통계 수정. (#10329, #10278)
* Check target node is a primary during cluster setslot (#10277)
   cluster setslot 중 대상 노드가 기본 노드인지 확인. (#10277)
* Fix key deletion not to invalidate WATCH when used on a logically expired key (#10256)
   논리적으로 만료된 키에 사용될 때 WATCH를 무효화하지 않도록 키 삭제 수정. (#10256)
* Sentinel: return an error if configuration save fails (#10151)
   Sentinel: 구성 저장에 실패하면 오류 반환. (#10151)
* Sentinel: fix a free-after-use issue re-registering Sentinels (#10333)
   Sentinel: Sentinel 재등록 사용 후 free-after-use 문제 수정. (#10333)

Redis 7.0 RC1 - 2022년 01월 31일(월)      

Introduction to the Redis 7.0 release
Redis 7.0 includes several new user-facing features, significant performance
optimizations, and many other improvements. It also includes changes that
potentially break backwards compatibility with older versions. We urge users to
review the release notes carefully before upgrading.

Redis 7.0에는 몇 가지 새로운 사용자 대면 기능, 상당한 성능 최적화 및 
기타 여러 개선 사항이 포함되어 있습니다.
또한 이전 버전과의 이전 버전과의 호환성을 잠재적으로 깨뜨릴 수 있는 변경 사항도 포함됩니다.
사용자는 업그레이드하기 전에 릴리스 정보를 주의 깊게 검토할 것을 권장합니다.

In particular, users should be aware of the following changes:
특히, 사용자는 다음 변경 사항에 유의해야 합니다.

1. Redis 7 stores AOF as multiple files in a folder; see Multi-Part AOF below.
    Redis 7은 AOF를 폴더에 여러 파일로 저장합니다. 아래의 다중 파트 AOF를 참조하십시오.
2. Redis 7 uses a new version 10 format for RDB files, which is incompatible
    with older versions.
    Redis 7은 이전 버전과 호환되지 않는 RDB 파일에 새로운 버전 10 형식을 사용합니다.
3. Redis 7 converts ziplist encoded keys to listpacks on the fly when loading
    an older RDB format. Conversion applies to loading a file from disk or
    replicating from a Redis master and will slightly increase loading time.
    Redis 7은 이전 RDB 형식을 로드할 때 ziplist로 인코딩된 키를 즉시 목록팩으로 변환합니다.
    변환은 디스크에서 파일을 로드하거나 Redis 마스터에서 복제하는데 적용되며 로드 시간이 약간 늘어납니다.   
4. See sections about breaking changes mentioned below.
    아래에 언급된 주요 변경 사항에 대한 섹션을 참조하세요.

Here is a comprehensive list of changes in this release compared to 6.2.6.
Each one includes the PR number that added it so that you can get more details
at https://github.com/redis/redis/pull/

다음은 6.2.6과 비교한 이번 릴리스의 변경 사항에 대한 포괄적인 목록입니다.
각 항목에는 추가한 PR(Pull Requests) 번호가 포함되어 있으므로 
https://github.com/redis/redis/pull/에서 자세한 내용을 확인할 수 있습니다.

New Features  새로운 기능
1. AOF: 
  1) Multi-Part AOF mechanism to avoid AOF rewrite overheads (#9788)
      AOF 재작성 오버헤드를 방지하기 위한 다중 파트(Multi-Part) AOF 메커니즘. (#9788)
  2) Timestamp annotations and support for point-in-time recovery (#9326)
     타임스탬프 주석(기호) 및 특정 시점 복구 지원. (#9326)

2. Redis Functions: A new way to extend Redis with server-side scripts (#8693)
   서버 측 스크립트로 Redis를 확장하는 새로운 방법. (#8693)
   see https://redis.io/topics/functions-intro

3. Lua
  1) support Function flags in EVAL scripts (#10126)
      EVAL 스크립트에서 함수 플래그 지원(#10126)
      see https://redis.io/topics/eval-intro#eval-flags
  2) Support RESP3 reply for Verbatim and Big-Number types (#9202)
      Verbatim 및 Big-Number 유형에 대한 RESP3 응답 지원. (#9202)
  3) Get Redis version via redis.REDIS_VERSION, redis.REDIS_VERSION_NUM (#10066)
      redis.REDIS_VERSION, redis.REDIS_VERSION_NUM을 통해 Redis 버전 가져오기. (#10066)
  
4. ACL: Fine-grained key-based permissions and allow users to support multiple
   sets of command rules with selectors (#9974)
   ACL: 세분화된 키 기반 권한 및 사용자가 선택기를 사용하여 여러 명령 규칙 세트를 지원할 수 있음. (#9974)
   see https://redis.io/topics/acl#key-permissions and https://redis.io/topics/acl#selectors.
  
5. Cluster: 
  1) Sharded (node-specific) Pub/Sub support (#8621)
     샤딩(노드별) Pub/Sub 지원. (#8621)
     see https://redis.io/topics/pubsub#sharded-pubsub
  2) Support for hostnames, instead of IP addresses only (#9530)
      IP 주소 대신 호스트 이름 지.원 (#9530)
  3) A mechanism for disconnecting cluster bus connections to prevent uncontrolled buffer growth (#9774)
     제어되지 않는 버퍼 증가를 방지하기 위해 클러스터 버스 연결을 끊는 메커니즘. (#9774)
  
6. First-class handling of sub-commands in most contexts (affecting ACL
   categories, INFO commandstats, etc.) (#9504, #10147)
   대부분의 컨텍스트에서 하위 명령의 최상급 처리(ACL 범주, INFO 명령 통계 등에 영향). (#9504, #10147)

7. Command metadata and documentation (#10104)
   명령 메타데이터와 문서. (#10104)
   see https://redis.io/commands/command-docs, https://redis.io/topics/command-tips
  
8. Command key-specs. A better way for clients to locate key arguments and their
   read/write purpose (#8324, #10122, #10167)
   Command key-specs. 클라이언트가 주요 인수와 읽기/쓰기 목적을 찾는 더 나은 방법. (#8324, #10122, #10167)
   see https://redis.io/topics/key-specs
  
9. Improved management of memory consumed by network buffers, and an option to
   drop clients when total memory exceeds a limit  (#8687)
   네트워크 버퍼가 사용하는 메모리 관리 개선 및 총 메모리가 제한을 초과할 때 
   클라이언트를 삭제하는 옵션. (#8687)

New user commands or command arguments
새 사용자 명령 또는 인수
* ZMPOP, BZMPOP commands (#9484)
   Usage: ZMPOP numkeys key [key ...] MIN | MAX [COUNT count]
   Usage: BZMPOP timeout numkeys key [key ...] MIN | MAX [COUNT count]
  
* LMPOP, BLMPOP commands (#9373)
   Usage: LMPOP numkeys key [key ...] LEFT | RIGHT [COUNT count]
   Usage: BLMPOP timeout numkeys key [key ...] LEFT | RIGHT [COUNT count]

* SINTERCARD, ZINTERCARD commands (#8946, #9425)
   Usage: SINTERCARD numkeys key [key ...] [LIMIT limit]
   Usage: ZINTERCARD numkeys key [key ...] [LIMIT limit]
  
* SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB (#8621)

* EXPIRETIME and PEXPIRETIME commands (#8474)
   Usage: EXPIRETIME key -> return seconds. Unix timestamp (since January 1, 1970)
   Usage: PEXPIRETIME key -> return milliseconds. Unix timestamp (since January 1, 1970)

* EXPIRE command group supports NX/XX/GT/LT options (#2795)
   EXPIRE 명령 그룹은 NX/XX/GT/LT 옵션을 지원합니다. (#2795)

* SET command supports combining NX and GET flags (#8906)
   SET 명령은 NX 및 GET 플래그 결합을 지원합니다. (#8906)
  
* BITPOS, BITCOUNT accepts BIT index (#9324)
   BITPOS, BITCOUNT는 BIT index을 허용합니다. (#9324)
  
* EVAL_RO, EVALSHA_RO command variants, to run on read-only replicas (#8820)
   EVAL_RO, EVALSHA_RO 명령 변형, 읽기 전용 복제본에서 실행. (#8820)
  
* SORT_RO command, to run on read-only replicas (#9299)
   SORT_RO 명령, 읽기 전용 복제본에서 실행. (#9299)
  
* SHUTDOWN arguments: NOW, FORCE, ABORT (#9872)
   SHUTDOWN 인수: NOW, FORCE, ABORT. (#9872)
  
* FUNCTION *, FCALL, FCALL_RO - https://redis.io/commands/function-load

* CONFIG SET/GET can handle multiple configs atomically, in one call (#9748, #9914)
   CONFIG SET/GET은 한 번의 호출로 여러 구성을 원자적으로 처리할 수 있습니다. (#9748, #9914)
  
* QUIT promoted to be a proper command, HOST: and POST demoted (#9798)
   QUIT는 적절한 명령으로 승격되고 HOST: 및 POST는 강등됨. (#9798)
  
* XADD supports auto sequence number via -* (#9217)
   XADD는 -*를 통해 자동 시퀀스 번호를 지원합니다. (#9217)

New administrative and introspection commands and command arguments
새로운 관리 및 내부 검사 명령과 명령 인수
* COMMAND DOCS (#9656, #10056, #10104)
* COMMAND LIST (#9504)
* COMMAND INFO accepts sub-commands as args, and no args too (#9504, #10056)
* LATENCY HISTOGRAM (#9462)
* CLUSTER LINKS (#9774)
* CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE (#9445)
* CLIENT NO-EVICT (#8687)
* ACL DRYRUN (#9974)
* SLOWLOG GET supports passing in -1 to get all entries (#9018)

Command replies that have been extended
확장된 명령 응답
* COMMAND and COMMAND INFO extended with tips, key-specs and sub-commands
   see https://redis.io/commands/command
* ACL CAT, COMMAND LIST list sub-commands (#10127)
* MODULE LIST reply includes path and args (#4848)
* OBJECT ENCODING returns listpack instead of ziplist (#8887, #9366)
* CLUSTER SLOTS hostname support (#9530)
* COMMAND command: Added the `blocking` and `module` flags (#10104, #9656)

Potentially Breaking Changes
잠재적 파괴에 대비한 변경
* Modifying the bind parameter to a non-default value will no longer implicitly
   disable protected-mode (#9034)
   bind 매개변수를 기본값이 아닌 값으로 수정하면 더 이상 보호 모드가 암시적으로 비활성화되지 않습니다. (#9034)
  
* Remove EVAL script verbatim replication, propagation, and deterministic
   execution logic (#9812)
   This has been deprecated and off by default since Redis 6 and is no longer
   supported.
   EVAL 스크립트 축어 복제, 전파 및 결정적 실행 논리 제거. (#9812)
   이것은 Redis 6부터 기본적으로 더 이상 사용되지 않으며 더 이상 지원되지 않습니다.
  
* ACL: pub/sub channels are blocked by default (acl-pubsub-default=resetchannels) (#10181)
   ACL: pub/sub 채널은 기본적으로 차단됩니다(acl-pubsub-default=resetchannels). (#10181)
  
* SCRIPT LOAD and SCRIPT FLUSH are no longer propagated to replicas / AOF (#9812)
   SCRIPT LOAD 및 SCRIPT FLUSH가 더 이상 복제본/AOF로 전파되지 않습니다. (#9812)
  
* ACL: Declarations of duplicate ACL users in startup files and command line
   arguments will result in an error, whereas previously the last declaration
   would overwrite the others. (#9330)
   ACL: 시작 파일 및 명령줄 인수에서 중복 ACL 사용자를 선언하면 오류가 발생하지만 
   이전에는 마지막 선언이 다른 선언을 덮어씁니다. (#9330)  

* Replication: TTLs are always replicated as absolute (not relative) millisecond timestamps (#8474)
   Replication: TTL은 항상 절대(상대 아님) 밀리초 타임스탬프로 복제됩니다. (#8474)
  
* Fixes in handling multi-key commands with expired keys on writable replicas (#9572)
   쓰기 가능한 복제본에서 만료된 키가 있는 다중 키 명령 처리 문제 수정. (#9572)
  
* CONFIG SET maxmemory returns before starting eviction (#10019)
   제거를 시작하기 전에 CONFIG SET maxmemory가 반환됨. (#10019)
  
* AOF: The new Multi-Part mechanism stores data as a set of multiple files in a designated folder (#9788)
   AOF: 새로운 Multi-Part 메커니즘은 데이터를 지정된 폴더에 여러 파일 세트로 저장합니다. (#9788)
  
* Remove STRALGO command, preserve LCS a standalone command which only works on keys (#9799)
  STRALGO 명령을 제거하고 LCS를 키에서만 작동하는 독립 실행형 명령으로 유지. (#9799)
  
* Remove gopher protocol support (#9057)
  고퍼 프로토콜 지원 제거 (#9057)
  
* MODULE and DEBUG commands disabled (protected) by default, for better security (#9920)
   더 나은 보안을 위해 기본적으로 MODULE 및 DEBUG 명령 비활성화(보호됨). (#9920)
   server.c processCommand() 보호모드에서는 debugCommand, moduleCommand 실해할 수 없음. 
   redis.conf 3개 parameter 추가, default no, recommand local
	enable-protected-configs no/yes/local	no이면 config set 명령을 실행할 수 없음. 
	enable-debug-command no/yes/local   enable_debug_cmd	PROTECTED_ACTION_ALLOWED_NO
	enable-module-command no/yes/local  
  
* Snapshot-creating and other admin commands in MULTI/EXEC transactions are now rejected (#10015)
   MULTI/EXEC 트랜잭션에서 스냅샷 생성 및 기타 관리 명령이 이제 거부됨. (#10015)
  
* PING is now rejected with -MASTERDOWN when replica-serve-stale-data=no (#9757)
   PING은 이제 replica-serve-stale-data=no일 때 -MASTERDOWN으로 거부됩니다. (#9757)
  
* ACL GETUSER reply now uses ACL syntax for `keys` and `channels` (#9974)
   ACL GETUSER 응답은 이제 'keys' 및 'channels'에 대해 ACL 구문을 사용합니다. (#9974)
  
* COMMAND reply drops `random` and `sort-for-scripts` flags, which are now part of command tips (#10104)
   COMMAND 응답은 이제 명령 팁의 일부인 'random' 및 'sort-for-scripts' 플래그를 삭제합니다. (#10104)
  
* LPOP/RPOP with count against non-existing list return null array (#10095)
   존재하지 않는 목록에 대한 개수가 있는 LPOP/RPOP 반환 null 배열. (#10095)
  
* INFO commandstats now shows the stats per sub-command (#9504)
   INFO commandstats는 이제 하위 명령당 통계를 표시합니다. (#9504)
  
* ZPOPMIN/ZPOPMAX used to produce wrong replies when count is 0 with non-zset (#9711)
   ZPOPMIN/ZPOPMAX는 zset이 아닌 상태에서 count가 0일 때 잘못된 응답을 생성하는 데 사용됨. (#9711)
  
* LPOP/RPOP used to produce wrong replies when count is 0 (#9692)
   count가 0일 때 잘못된 응답을 생성하는 데 사용되는 LPOP/RPOP. (#9692)

* CONFIG GET bind now returns the current value in effect, even if the implicit default is in use (#9034)
   CONFIG GET 바인드는 이제 암시적 기본값이 사용 중이더라도 유효한 현재 값을 반환합니다. (#9034).
  
* CONFIG REWRITE now rewrites the list of modules to load (#4848)
   CONFIG REWRITE는 이제 로드할 모듈 목록을 다시 작성합니다. (#4848)
  
* Config: repl-diskless-sync is now set to yes by default (#10092)
   Config: repl-diskless-sync는 이제 기본적으로 yes로 설정됩니다(#10092).
  
* When shutting down, Redis can optionally wait for replicas to catch up on the replication link (#9872)
   종료할 때 Redis는 선택적으로 복제본이 복제 링크를 따라잡을 때까지 기다릴 수 있습니다. (#9872)
  
* Most CONFIG SET, REWRITE, RESETSTAT commands are now allowed during loading (#9878)
   이제 로드하는 동안 대부분의 CONFIG SET, REWRITE, RESETSTAT 명령이 허용됩니다. (#9878)
  
* READONLY and READWRITE commands are now allowed when loading and on stale replicas (#7425)
   READONLY 및 READWRITE 명령은 이제 로드할 때와 오래된 복제본에서 허용됩니다. (#7425)
  
* Fix ACL category for SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING (#9208)
   SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING에 대한 ACL 카테고리 수정 (#9208)
  
* RESET is now allowed even when on unauthenticated connections (#9798)
   인증되지 않은 연결에서도 RESET이 허용됨 (#9798)
  
* SCRIPT LOAD is now allowed on stale replicas (#10126)
   SCRIPT LOAD는 이제 오래된 복제본에서 허용됩니다. (#10126)

Security improvements  보안 개선
* Sensitive configs and commands blocked (protected) by default (#9920)
  민감한 구성 및 명령은 기본적으로 차단(보호)됩니다. (#9920)
  config set, debug, module 명령     
* Improve bind and protected-mode config handling (#9034)
  바인딩 및 보호 모드 구성 처리 개선 (#9034)
* Sentinel: avoid logging auth-pass value (#9652)
  Sentinel: password 기록 방지 (#9652)
* redis-cli: sensitive commands bypass the history file (#8895)
  redis-cli: 민감한 명령은 히스토리 파일에 기록하지 않습니다. (#8895)

Performance and resource utilization improvements
성능 및 자원 활용도 향상
* Significant memory saving and latency improvements in cluster mode (#9356)
   클러스터 모드에서 상당한 메모리 절약 및 대기 시간 개선 (#9356)

* Significant memory savings in case of many hash or zset keys (#9228)
   Hash 또는 zset 키가 많은 경우 상당한 메모리 절약 (#9228)
* Replication backlog and replicas use one global shared replication buffer (#9166)
   복제 백로그 및 복제본은 하나의 전역 공유 복제 버퍼를 사용합니다. (#9166).
		https://github.com/redis/redis/pull/9166 자세히 분석 필요 
   repl-backlog-size
   client-output-buffer-limit
   위 2개를 통합해서 replBufBlock를 사용. 
   replBacklog와 client가 listNode *ref_repl_buf_node를 공유해서 사용. 
      ref_repl_buf_node: networking.c replication.c 
   ref_repl_buf_node는 replBufBlock list이다. 
   replBufBlock는 server.h 에 정의 
   networking.c, replication.c에서 사용. 

	redis.conf
		Note that it doesn't make sense to set the replica clients output buffer limit lower than 
		the repl-backlog-size config (partial sync will succeed and then replica will get disconnected).
		Such a configuration is ignored (the size of repl-backlog-size will be used).
		This doesn't have memory consumption implications since the replica client

		복제본 클라이언트 출력 버퍼 제한을 repl-backlog-size 구성보다 낮게 설정하는 것은 의미가 없습니다
			networking.c checkClientOutputBufferLimits() 
				if (class == CLIENT_TYPE_SLAVE && hard_limit_bytes &&
					(long long)hard_limit_bytes < server.repl_backlog_size)
					hard_limit_bytes = server.repl_backlog_size;		
		(부분 동기화가 성공한 다음 복제본 연결이 끊어짐).
		이러한 구성은 무시됩니다(repl-backlog-size의 크기가 사용됨).
		이것은 복제 클라이언트 이후로 메모리 소비에 영향을 미치지 않습니다.
  
* Significant reduction of copy-on-write memory overheads (#8974)
   copy-on-write 메모리 오버헤드의 상당한 감소. (#8974)
    https://github.com/redis/redis/pull/8974 자세한 내용 파악 필요
	
* Free unused capacity in the cluster send buffer (#9255)
   클러스터 송신 버퍼에서 사용하지 않은 공간 해제. (#9255)
  
* Memory efficiency, make full use of client struct memory for reply buffers (#8968)
   메모리 효율성, 응답 버퍼에 대한 클라이언트 구조체 메모리를 최대한 활용. (#8968)
  
* Replace ziplist with listpack in Hash, List, Zset (#8887, #9366, #9740)
   Hash, List, Zset에서 ziplist를 listpack으로 교체 (#8887, #9366, #9740)
	ziplist일 때와 값은 동일함. 
	list-max-listpack-size -2   8kb
	zset-max-listpack-entries 128
	zset-max-listpack-value 64
	hash-max-listpack-entries 512
	hash-max-listpack-value 64

* Add support for list type to store elements larger than 4GB (#9357)
   4GB보다 큰 요소를 저장하기 위한 목록 유형 지원 추가. (#9357)
  
* Reuse temporary client objects for blocked clients by module (#9940)
   모듈별로 차단된 클라이언트에 대한 임시 클라이언트 개체 재사용. (#9940)
  
* Remove command argument count limit, dynamically grow argv buffer (#9528)
   명령 인수 수 제한 제거, argv 버퍼 동적으로 증가. (#9528)
  
* Optimize list type operations to seek from the nearest end (#9454)
   가장 가까운 끝에서 검색하도록 목록 유형 작업을 최적화합니다. (#9454).
  
* Improvements in fsync to avoid large writes to disk (#9409)
   디스크에 대용량 쓰기를 방지하기 위한 fsync 개선. (#9409)
	여전히 4mb인데? 뭘 바꾼거지?  PR에는 32mb로 하자고 돼있던데.
	 aof-rewrite-incremental-fsync yes	aof_rewrite_incremental_fsync  aof.c REDIS_AUTOSYNC_BYTES  4mb
	 rdb-save-incremental-fsync yes	rdb_save_incremental_fsync rdb.c REDIS_AUTOSYNC_BYTES  4mb
  
* BITSET and BITFIELD SET only propagated when the value actually changed (#9403)
   BITSET 및 BITFIELD SET은 값이 실제로 변경되었을 때만 전파됨. (#9403)

* Improve latency when a client is unblocked by module timer (#9593)
   클라이언트가 모듈 타이머에 의해 차단 해제될 때 대기 시간 개선. (#9593)

Other General Improvements
기타 일반 개선 사항
* Make partial sync possible after master reboot (#8015)
   마스터 재부팅 후 부분 동기화 가능. (#8015)
* Always create a base AOF file when redis starts from empty (#10102)
   redis가 비어 있는 상태에서 시작될 때 항상 기본 AOF 파일을 생성합니다. (#10102).
* Replica keep serving data during repl-diskless-load=swapdb for better availability (#9323)
   복제본은 더 나은 가용성을 위해 repl-diskless-load=swapdb 동안 데이터를 계속 제공합니다. (#9323)

Changes in CLI tools
redis-cli 변경 내용
* redis-cli --json, and -2 options (#9954)
* redis-cli --scan, add sleep interval option (#3751)
* redis-cli --replica optimization, skip RDB generation (#10044)
* redis-cli --functions-rdb, generate RDB with Functions only (#9968)
* redis-cli -X, take an arbitrary arg from stdin, extend --cluster call take -x (#9980)
* redis-benchmark -x takes an argument from stdin (#9130)
* redis-benchmark, Added URI support (#9314)
* redis-cli monitor and pubsub can be aborted with Ctrl+C, keeping the cli alive (#9347)

Platform / toolchain support related improvements
플랫폼/툴체인 지원 관련 개선 사항
* Upgrade jemalloc 5.2.1 (#9623)
   Jemalloc를 5.1.0에서 5.2.1로 업그레이드했습니다. (#9623) 
* Fix RSS metrics on NetBSD and OpenBSD (#10116, #10149)
* Check somaxconn system settings on macOS, FreeBSD and OpenBSD (#9972)
   macOS, FreeBSD 및 OpenBSD에서 somaxconn 시스템 설정 확인 (#9972)  
	server.c checkTcpBacklogSettings() 
	  HAVE_PROC_SOMAXCONN 			-> linux
	  HAVE_SYSCTL_KIPC_SOMAXCONN  	-> apple(macOS), FreeBSD
	  HAVE_SYSCTL_KERN_SOMAXCONN	-> OpenBSD
	  SOMAXCONN
* Better fsync on MacOS, improve power failure safety (#9545)
   MacOS에서 더 나은 fsync, 정전 안전성 향상 (#9545)

New configuration options
새 구성 설정 옵션
* CONFIG SET/GET can handle multiple configs in one call (#9748, #9914)
   CONFIG SET/GET은 한 번의 호출로 여러 구성을 처리할 수 있습니다. (#9748, #9914)
  
* Support glob pattern matching for config include files (#8980)
  구성 포함 파일에 대한 glob 패턴 일치 지원 .(#8980)
  
* appenddirname, folder where multi-part AOF files are stored (#9788)

* appenddirname, 여러 부분으로 구성된 AOF 파일이 저장되는 폴더(#9788)
	redis.conf 
		For convenience, Redis stores all persistent append-only files in a dedicated directory. 
		The name of the directory is determined by the appenddirname configuration parameter.
		편의를 위해 Redis는 모든 영구 추가 전용 파일을 전용 디렉터리에 저장합니다.
		디렉토리 이름은 appenddirname 구성 매개변수에 의해 결정됩니다.
		appenddirname "appendonlydir"

* shutdown-timeout, default 10 seconds (#9872)
   종료 시간 초과, 기본 10초 (#9872)
   복제본에 보낼것을 다 보내고 종료하는 제한 시간 설정. 
   이 시간이 지나면 복제본에 다 보내지 못해도 종료한다.
   redis.conf  
	shutdown-timeout 10    
	default: 10초 

	Maximum time to wait for replicas when shutting down, in seconds.
	During shut down, a grace period allows any lagging replicas to catch up with 
	the latest replication offset before the master exists. 
	This period can prevent data loss, especially for deployments without configured disk backups.
	The 'shutdown-timeout' value is the grace period's duration in seconds. It is only applicable 
	when the instance has replicas. 
	To disable the feature, set the value to 0.

	종료 시 복제본을 기다리는 최대 시간(초)입니다.
	종료하는 동안 유예 기간을 통해 지연된 복제본은 마스터가 존재하기 전에 
	최신 복제 오프셋을 따라잡을 수 있습니다.
	이 기간은 특히 디스크 백업이 구성되지 않은 배포의 경우 데이터 손실을 방지할 수 있습니다.
	'shutdown-timeout' 값은 유예 기간(초)입니다. 인스턴스에 복제본이 있는 경우에만 적용됩니다.
	기능을 비활성화하려면 값을 0으로 설정하십시오.  default는 10초입니다. 

* maxmemory-clients, allows limiting the total memory usage by all clients (#8687)
   maxmemory-clients, 모든 클라이언트의 총 메모리 사용량 제한 허용 (#8687)
	redis.conf 
	일부 시나리오에서는 클라이언트 연결이 메모리를 차지하여 OOM 오류 또는 
	데이터 제거로 이어질 수 있습니다.
	이를 피하기 위해 모든 클라이언트 연결(모든 pubsub 및 일반 클라이언트)에서 사용하는 
	누적 메모리를 제한할 수 있습니다.
	한도에 도달하면 서버가 연결을 끊고 메모리를 확보합니다.
	서버는 먼저 가장 많은 메모리를 사용하는 연결을 끊으려고 시도합니다.
	우리는 이 메커니즘을 "클라이언트 제거"라고 부릅니다.
  
	 클라이언트 제거는 다음과 같이 maxmemory-clients 설정을 사용하여 구성됩니다.
	 - 기본값(default)
		default는 클라이언트가 사용하는 총 메모리 제한을 하지 않는 것이다. 
		0 - 클라이언트 제거가 비활성화됨

	 - 클라이언트 제거 임계값에 메모리 값을 사용할 수 있습니다.
		maxmemory-clients 1g
	 - 백분율 값(1%에서 100% 사이)은 클라이언트 제거 임계값이 maxmemory 설정의 
	   백분율을 기반으로 함을 의미합니다. (maxmemory가 설정되어 있을 때 적용 가능)
	   예를 들어 클라이언트 제거를 maxmemory의 5%로 설정하려면:					
		maxmemory-clients 5%   

* cluster-port, can control the bind port of cluster bus (#9389)
   cluster-port, 클러스터 버스의 바인드 포트 제어 가능 (#9389)
	redis.conf
		The cluster port is the port that the cluster bus will listen for inbound connections on. 
		When set to the default value, 0, it will be bound to the command port + 10000. 
		Setting this value requires you to specify the cluster bus port when executing cluster meet.

		클러스터 포트는 클러스터 버스가 인바운드 연결을 수신할 포트입니다.
		기본값인 0으로 설정하면 base-port + 10000에 바인딩됩니다.
		이 값을 설정하면 cluster meet 할 때 base-port와 함께 cluster-port도 지정해야 합니다. 		
		cluster meet ip base-port cluster-port
		
		redis-cli로 클러스터를 생성할 때는 아래와 같이 cluster-port를 지정하지 않아도 되고 지정해도 됩니다. 
		src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
		src/redis-cli --cluster create 127.0.0.1:7000@8000 127.0.0.1:7001@8001 127.0.0.1:7002@8002

* bind-source-addr, configuration argument control IP of outgoing connections (#9142)
   bind-source-addr, 나가는 연결의 설정 인자 제어 IP (#9142)
   redis.conf 
	By default, outgoing connections (from replica to master, from Sentinel to instances, cluster bus, etc.) 
	are not bound to a specific local address. 
	In most cases, this means the operating system will handle that based on routing and the interface 
	through which the connection goes out.
	Using bind-source-addr it is possible to configure a specific address to bind to, which may also 
	affect how the connection gets routed.

	기본적으로 나가는 연결(복제본에서 마스터로, Sentinel에서 인스턴스, 클러스터 버스 등)은 
	특정 로컬 주소에 바인딩되지 않습니다.
	대부분의 경우 이는 운영 체제가 라우팅 및 연결이 나가는 인터페이스를 기반으로 처리함을 의미합니다.
	bind-source-addr을 사용하면 바인딩할 특정 주소를 구성할 수 있으며, 
	이는 연결이 라우팅되는 방식에도 영향을 줄 수 있습니다.
	
     bind-source-addr 10.0.0.1
  
* busy-reply-threshold, alias for the old lua-time-limit (#9963)
   busy-reply-threshold, 이전 lua-time-limit의 별칭(#9963)
	redis.conf   default 5000ms
		lua-time-limit 5000
		busy-reply-threshold 5000
  
* repl-diskless-sync-max-replicas, allows faster replication in some cases (#10092)
   repl-diskless-sync-max-replicas, 경우에 따라 더 빠른 복제 허용 (#10092)

	When diskless replication is enabled with a delay, it is possible to let the replication 
	start before the maximum delay is reached if the maximum number of replicas expected have connected. 
	Default of 0 means that the maximum is not defined and Redis will wait the full delay.

	지연된 디스크 없는 복제(repl-diskless-sync-delay 5)가 활성화된 경우 예상되는 
	최대 복제본 수가 연결된 경우 최대 지연에 도달하기 전에 복제가 시작되도록 할 수 있습니다.
	기본값이 0이면 최대값이 정의되지 않고 Redis가 전체 지연을 기다립니다.
	
		repl-diskless-sync-max-replicas 0
  
* latency-tracking, enabled by default, and latency-tracking-info-percentiles (#9462)
   기본적으로 활성화된 latency-tracking, latency-tracking-info-percentiles (#9462)

	The Redis extended latency monitoring tracks the per command latencies and enables 
	exporting the percentile distribution via the INFO latencystats command, and cumulative 
	latency distributions (histograms) via the LATENCY command.

	By default, the extended latency monitoring is enabled since the overhead of keeping track 
	of the command latency is very small.
		latency-tracking yes

	By default the exported latency percentiles via the INFO latencystats command are the p50, p99, and p999.
	latency-tracking-info-percentiles 50 99 99.9

	Redis 확장 대기 시간 모니터링은 명령당 대기 시간을 추적하고 
	INFO latencystats 명령을 통해 백분위수 분포를 내보내고 
	LATENCY 명령을 통해 누적 대기 시간 분포(히스토그램)를 내보낼 수 있습니다.

	기본적으로 명령 대기 시간을 추적하는 오버헤드가 매우 작기 때문에 
	확장 대기 시간 모니터링이 활성화됩니다.
	latency-tracking yes

	기본적으로 INFO latencystats 명령을 통해 내보낸 대기 시간 백분위수는 p50, p99 및 p999입니다.
	latency-tracking-info-percentiles 50 99 99.9

* cluster-allow-reads-when-down		6.0.0에 추가. 

* cluster-allow-pubsublocal-when-down (#8621)
   cluster-allow-pubsubshard-when-down yes
  
   Issue: pubsublocal -> pubsubshard
	source도 pubsubshard로 되어 있습니다. 
	releasenotes에 pubsubshard를 pubsublocal로 잘못 표기했습니다.  7.0.3에 반영 예정
	The releasenotes incorrectly marked pubsubshard as pubsublocal.
	cluster-allow-pubsublocal-when-down	  
	  https://github.com/redis/redis/issues/10939#issue-1294947707  

		This option, when set to yes, allows nodes to serve pubsub shard traffic 
		while the cluster is in a down state, as long as it believes it owns the slots.
		
		This is useful if the application would like to use the pubsub feature even 
		when the cluster global stable state is not OK. 
		If the application wants to make sure only one shard is serving a given channel, 
		this feature should be kept as yes.

		이 옵션을 yes로 설정하면 클러스터가 슬롯을 소유하고 있다고 생각하는 한 
		클러스터가 다운 상태에 있는 동안 노드가 pubsub 샤드 트래픽을 처리할 수 있습니다.

		이는 클러스터 전역 안정 상태가 정상이 아닌 경우에도 애플리케이션이 pubsub 기능을 
		사용하려는 경우에 유용합니다.
		애플리케이션이 하나의 샤드만 지정된 채널을 제공하도록 하려면 이 기능을 yes로 유지해야 합니다.
		
		cluster-allow-pubsubshard-when-down yes

* cluster-link-sendbuf-limit (#9774)

	Cluster link send buffer limit is the limit on the memory usage of an individual cluster bus 
	link's send buffer in bytes. 
	Cluster links would be freed if they exceed this limit. 
	This is to primarily prevent send buffers from growing unbounded on links toward slow peers 
	(E.g. PubSub messages being piled up).
	This limit is disabled by default. 
	Enable this limit when 'mem_cluster_links' INFO field and/or 'send-buffer-allocated' 
	entries in the 'CLUSTER LINKS` command output continuously increase.
	Minimum limit of 1gb is recommended so that cluster link buffer can fit in at least 
	a single PubSub message by default. (client-query-buffer-limit default value is 1gb)

	클러스터 링크 송신 버퍼 제한은 개별 클러스터 버스 링크 송신 버퍼의 메모리 사용량에 대한 제한(바이트)입니다.
	이 제한을 초과하면 클러스터 링크가 해제됩니다.
	이것은 주로 느린 피어를 향한 링크에서 전송 버퍼가 무제한으로 커지는 것을 방지하기 위한 것입니다
	(예: PubSub 메시지가 쌓임).
	이 제한은 기본적으로 비활성화되어 있습니다.
	'CLUSTER LINKS' 명령 출력의 'mem_cluster_links' INFO 필드 및/또는 'send-buffer-allocated' 항목이 
	지속적으로 증가하는 경우 이 제한을 활성화합니다.
	클러스터 링크 버퍼가 기본적으로 하나 이상의 PubSub 메시지에 들어갈 수 있도록 
	최소 제한 1GB를 권장합니다. (client-query-buffer-limit 기본값은 1gb)

	cluster-link-sendbuf-limit 0
 
* cluster-announce-hostname and cluster-preferred-endpoint-type (#9530)

	Clusters can configure their announced hostname using this config. 
	This is a common use case for applications that need to use TLS Server Name Indication (SNI) or 
	dealing with DNS based routing. 
	By default this value is only shown as additional metadata in the CLUSTER SLOTS command, 
	but can be changed using 'cluster-preferred-endpoint-type' config. 
	This value is  communicated along the clusterbus to all nodes, setting it to an empty string will remove 
	the hostname and also propagate the removal.

	클러스터는 이 구성을 사용하여 발표된 호스트 이름을 구성할 수 있습니다.
	이것은 TLS SNI(서버 이름 표시)를 사용해야 하거나 DNS 기반 라우팅을 처리해야 하는 
	애플리케이션의 일반적인 사용 사례입니다.
	기본적으로 이 값은 CLUSTER SLOTS 명령에서 추가 메타데이터로만 표시되지만 
	'cluster-preferred-endpoint-type' 구성을 사용하여 변경할 수 있습니다.
	이 값은 클러스터 버스를 따라 모든 노드에 전달되며 빈 문자열로 설정하면 호스트 이름이 
	제거되고 제거도 전파됩니다.
  
		cluster-announce-hostname ""

	Clusters can advertise how clients should connect to them using either their IP address, 
	a user defined hostname, or by declaring they have no endpoint. 
	Which endpoint is shown as the preferred endpoint is set by using the cluster-preferred-endpoint-type 
	config with values 'ip', 'hostname', or 'unknown-endpoint'. 
	This value controls how the endpoint returned for MOVED/ASKING requests as well as 
	the first field of CLUSTER SLOTS. 
	If the preferred endpoint type is set to hostname, but no announced hostname is set, 
	a '?'  will be returned instead.

	클러스터는 IP 주소, 사용자 정의 호스트 이름을 사용하거나 엔드포인트가 없다고 
	선언하여 클라이언트가 클러스터에 연결해야 하는 방법을 알릴 수 있습니다.
	기본 엔드포인트로 표시되는 엔드포인트는 'ip', 'hostname' 또는 'unknown-endpoint' 값과 함께 
	cluster-preferred-endpoint-type 구성을 사용하여 설정됩니다.
	이 값은 끝점이 MOVED/ASKING 요청에 대해 반환되는 방법과 CLUSTER SLOTS의 첫 번째 필드를 제어합니다.
	기본 엔드포인트 유형이 호스트 이름으로 설정되어 있지만 발표된 호스트 이름이 설정되지 
	않은 경우 '?' 대신 반환됩니다.

	When a cluster advertises itself as having an unknown endpoint, it's indicating that 
	the server doesn't know how clients can reach the cluster. 
	This can happen in certain networking situations where there are multiple possible routes 
	to the node, and the server doesn't know which one the client took. 
	In this case, the server is expecting the client to reach out on the same endpoint 
	it used for making the last request, but use the port provided in the response.

	클러스터가 알 수 없는 엔드포인트가 있는 것으로 자신을 알릴 때 서버가 클라이언트가 
	클러스터에 도달할 수 있는 방법을 모른다는 것을 나타냅니다.
	이것은 노드에 대한 여러 가능한 경로가 있고 서버가 클라이언트가 선택한 경로를 모르는 
	특정 네트워킹 상황에서 발생할 수 있습니다.
	이 경우 서버는 클라이언트가 마지막 요청에 사용한 것과 동일한 끝점에 도달할 것으로 예상하지만 
	응답에 제공된 포트를 사용합니다.

		cluster-preferred-endpoint-type ip
  
* list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-* as aliases for
   the old ziplist configs (#8887, #9366, #9740)
   list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-*을 이전 ziplist 구성의 
   별칭으로 사용(#8887, #9366, #9740)

INFO fields and introspection changes
INFO 필드 및 내성 변경 사항
* INFO: latencystats section (#9462)
* INFO: total_active_defrag_time and current_active_defrag_time (#9377)
* INFO: total_eviction_exceeded_time and current_eviction_exceeded_time (#9031)
* INFO: evicted_clients (#8687)
* INFO: mem_cluster_links, total_cluster_links_buffer_limit_exceeded (#9774)
* INFO: current_cow_peak (#8974)
* INFO: Remove aof_rewrite_buffer_length (#9788)
* INFO MEMORY: changes to separate memory usage of Functions and EVAL (#9780)
* INFO MEMORY: Add mem_total_replication_buffers, change meaning of mem_clients_slaves (#9166)
* MEMORY STATS: Report slot to keys map size in in cluster mode (#10017)
* CLIENT LIST: tot-mem, multi-mem (#8687)
* CLIENT LIST, INFO: Show RESP version (#9508)
* SENTINEL INFO: tilt_mode_since (#9000)
* LATENCY: Track module-acquire-GIL latency (#9608)

Module API changes
* Add API for replying with RESP3 types (#8521, #9639, #9632)
* Add API for parsing RESP3 replies from RM_Call (#9202)
* Add RM_Call '0' and '3' flags to control RESP version to be used (#9202)
* Add Support for validating ACL explicitly (#9309, #9974)
* Add missing list type functionality APIs (#8439)
* Add API for yielding to Redis events during long busy jobs (#9963)
* Add API for registering other file descriptors to the Redis event loop (#10001)
* Enhance mem_usage/free_effort/unlink/copy and IO callbacks to have key name and DB index (#8999)
* Enhance mem_usage callback to get the requested sample size (#9612)
* RM_GetContextFlags: CTX_FLAGS_ASYNC_LOADING, CTX_FLAGS_RESP3 (#9323, #9202)
* Mark APIs as non-experimental (#9983)
* RM_CreateSubcommand (#9504)
* RM_KeyExists (#9600)
* RM_TrimStringAllocation (#9540)
* RM_LoadDataTypeFromStringEncver (#9537)
* RM_MonotonicMicroseconds (#10101)
* Add ReplAsyncLoad event and deprecate the ReplBackup event (#9323)
* Add RM_SetModuleOptions OPTIONS_HANDLE_REPL_ASYNC_LOAD flag (#9323)

Bug Fixes 버그 수정
* Fix COMMAND GETKEYS on EVAL without keys (#9733)
   키 없이 EVAL에서 COMMAND GETKEYS 수정. (#9733)
  
* Improve MEMORY USAGE with allocator overheads (#9095)
   할당자 오버헤드로 메모리 사용량 개선. (#9095)
  
* Unpause clients after manual failover ends instead of waiting for timed (#9676)
   수동 장애 조치가 종료될 때까지 기다리지 않고 클라이언트 일시 중지 해제. (#9676)

* Lua: 
  1) fix crash on a script call with many arguments, a regression in v6.2.6 (#9809)
      v6.2.6의 회귀, 많은 인수가 있는 스크립트 호출의 비정상 종료 수정. (#9809)
  2) Use all characters to calculate string hash to prevent hash collisions (#9449)
      모든 문자를 사용하여 문자열 해시를 계산하여 해시 비정상 종료 방지. (#9449)

* Prevent LCS from allocating temp memory over proto-max-bulk-len (#9817)
   LCS가 proto-max-bulk-len에 임시 메모리를 할당하는 것을 방지. (#9817)

* Tracking: Make invalidation messages always after command's reply (#9422)
   Tracking: 명령의 응답 이후에 항상 무효화 메시지를 작성합니다. (#9422)

* Cluster: Hide empty replicas from CLUSTER SLOTS responses (#9287)
   Cluster: CLUSTER SLOTS 응답에서 빈 복제본 숨기기. (#9287)
  
* CLIENT KILL killed all clients when used with ID of 0 (#9853)
   CLIENT KILL은 ID가 0인 경우 모든 클라이언트를 종료했습니다. (#9853)
   ID가 0이면 kill 하지 않게 수정. networking.c clientCommand() 

* Fix bugs around lists with list-compress-depth (#9849, #9779)
   list-compress-depth가 있는 목록 주변의 버그 수정. (#9849, #9779)

* Fix one in a blue moon LRU bug in RESTORE, RDB loading, and module API (#9279)
   RESTORE, RDB 로딩, 모듈 API의 블루문 ​​LRU 버그 수정 (#9279)

* Reset lazyfreed_objects info field with RESETSTAT, test for stream lazyfree (#8934)
   RESETSTAT로 lazyfreed_objects 정보 필드 재설정, 스트림 lazyfree 테스트 (#8934)
  
* Fix RDB and list node compression for handling values larger than 4GB (#9776)
   4GB보다 큰 값을 처리하기 위한 RDB 및 목록 노드 압축 수정 (#9776)
  
* Fix a crash when adding elements larger than 2GB to a Set or Hash (#9916)
   2GB보다 큰 요소를 Set 또는 Hash에 추가할 때 발생하는 비정상 종료 수정 (#9916)
  
* Diskless replication could not count as a change and skip next database SAVE (#9323)
   디스크 없는 복제는 변경 사항으로 간주되지 않고 다음 데이터베이스 SAVE를 건너뛸 수 있습니다. (#9323)
  
* Fix excessive stream trimming due to an overflow (#10068)
   오버플로로 인한 과도한 스트림 트리밍 수정 (#10068)
  
* Safe and organized exit when receiving SIGTERM while loading (#10003)
   로딩 중 SIGTERM 수신 시 안전하고 체계적인 종료 (#10003)
  
* Improve EXPIRE TTL overflow detection (#9839)
   EXPIRE TTL 오버플로 감지 개선 (#9839)
  
* Add missed error counting for INFO errorstats (#9646)
   정보 오류 통계에 대한 누락된 오류 계산 추가 (#9646)
  
* DECRBY LLONG_MIN caused negation overflow (#9577)
   DECRBY LLONG_MIN이 부정 오버플로를 일으켰습니다. (#9577).
   t_string.c decrbyCommand() 
  
* Delay discarding cached master when full synchronization (#9398)
   전체 동기화 시 캐시된 마스터 폐기 지연 (#9398)
	현재 복제본이 마스터와 전체 동기화를 시작해야 하면 전체 동기화가 실패했는지 여부에 관계없이 
	캐시된 마스터를 버립니다. 마스터의 데이터 스냅샷을 기다리는 동안 복제본의 데이터가 변경되지 
	않기 때문에 전체 동기화에 실패하더라도 캐시된 마스터는 여전히 유효하다고 생각합니다. 
	이제 RDB 전송이 완료되었을 때만 캐시된 마스터를 버리고 데이터 공간을 변경하기 시작합니다. 
	이 make 복제본은 전체 동기화 중에 새 마스터가 실패하면 다른 새 마스터와 부분적으로 
	재동기화를 시작할 수 있습니다.  
	
	복제본은 더 나은 가용성을 위해 repl-diskless-load=swapdb 동안 데이터를 계속 제공합니다 . #9323
  
* Fix Stream keyspace notification and persistence triggers in consumer creation and deletion (#9263)
   소비자 생성 및 삭제 시 스트림 키스페이스 알림 및 지속성 트리거 수정 (#9263)
  
* Fix rank overflow in zset with more than 2B entries (#9249)
   2B 이상의 항목이 있는 zset의 순위 오버플로 수정 (#9249)
  
* Avoid starting in check-aof / check-rdb / sentinel modes if only the folder
   name contains that name (#9215, #9176)
   폴더 이름에만 해당 이름이 포함된 경우 check-aof / check-rdb / sentinel 모드에서 
   시작하지 마십시오. (#9215, #9176)
  
* create the log file only after done parsing the entire config file (#6741)
   전체 구성 파일의 구문 분석이 완료된 후에만 로그 파일을 생성합니다. (#6741)
   config.c loadServerConfigFromString() 의 중간에 있었던 logfile open을 맨 나중으로 실행하는 것으로 위치시킴.
  
* redis-cli: 
  1) Fix SCAN sleep interval for --bigkeys, --memkeys, --hotkeys (#9624)
      redis-cli: --bigkeys, --memkeys, --hotkeys에 대한 SCAN 절전 간격 수정 (#9624)
	  redis-cli.c 
		bigkeys, memkeys -> findBigKeys() 	(scan_loops % 100) == 0 추가
		hotkeys -> findHotKeys()				(scan_loops % 100) == 0 추가 
  
  2) Fix prompt to show the right DB num and transaction state after RESET (#9096)
      redis-cli: RESET 후 올바른 DB 번호와 트랜잭션 상태를 표시하도록 프롬프트 수정. (#9096)
	    networking.c resetCommand(), clearClientConnectionState() 
	
* Module API: 
  1) fix possible propagation bugs in case a module calls CONFIG SET
      maxmemory outside a command (#10019, #9890)
      모듈이 명령 외부에서 CONFIG SET maxmemory를 호출하는 경우 
      가능한 전파 버그 수정 (#10019, #9890)
  2) carry through client RESP version to module blocked clients (#9634)
     클라이언트 RESP 버전을 모듈 차단 클라이언트로 전달(#9634)
  3) release clients blocked on module commands in cluster resharding
      and down state (#9483)
      클러스터 리샤딩 및 다운 상태에서 모듈 명령에 대해 차단된 클라이언트 해제. (#9483)  

* Sentinel: 
  1) Fix availability after master reboot (#9438)
      마스터 재부팅 후 가용성 수정. (#9438)
  2) Fix memory leak with TLS (#9753)
      TLS로 메모리 누수 수정. (#9753)
  3) Fix possible failover due to duplicate zero-port (#9240)
      중복된 제로 포트로 인한 장애 조치 가능성 수정. (#9240)
  4) Fix issues with hostname support (#10146)
      호스트 이름 지원 문제 수정. (#10146)
  5) Fix election failures on certain container environments (#10197)
      특정 컨테이너 환경에서 선택 실패 수정. (#10197)

<< Introduction Release Notes 7 Release Notes 6 >>

Email 返事がかかってなれば、メールでお知らせします。