ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingredis เหมือน key หมดอายุแล้วไม่ลบออกจาก memory
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: redis เหมือน key หมดอายุแล้วไม่ลบออกจาก memory  (อ่าน 1947 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
down971863
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 12



ดูรายละเอียด
« เมื่อ: 03 กุมภาพันธ์ 2021, 17:50:11 »

ลองติดตั้งใช้ redis มาได้ซักพักนึงแล้ว key กำหนดอายุพอครบหมดอายุแล้วทำไมเหมือน memory ที่ดึงใช้สำหรับส่วนของ redis ที่ดูในคำสั่ง top เหมือนไม่ลดลงเพิ่มขึ้นเรื่อย ๆ จนใช้ ram จะเต็มแล้วต้องแก้ไขยังไงให้มันหมดอายุแล้วถูกลบหายไปด้วยครับ ตอนนี้ใช้วิธี ram จะเต็ม reboot เครื่องเอาซึ่งเปลืองเวลาและไม่ดีกับผู้ใช้งานมาก ๆ

คำสั่งที่ใช้ใน php ประมาณนี้

$redis->set('key01', 'value01');
$redis->expire('key01',600);

ลองกด info ดูมันขึ้นแบบนี้ส่วนที่ expires คือที่หมดอายุแล้ว 32791 ใช่ไหม

# Keyspace
db0:keys=50288,expires=32791,avg_ttl=297315

มันมีคำสั่งสำหรับลบที่ expire ไปแล้วไหมครับแบบ crontab หรือว่าต้องใช้วิธ๊ reboot เครื่องใหม่เท่านั้น
บันทึกการเข้า
icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,879



ดูรายละเอียด
« ตอบ #1 เมื่อ: 03 กุมภาพันธ์ 2021, 18:15:54 »

expires คือ key ที่ระบุเวลาหมดอายุไว้ครับ ไม่ใช่ key ที่หมดอายุไปแล้ว https://stackoverflow.com/ques...edis-info-keyspace-output-mean


ถ้าอยากล้างข้อมูลออกจาก redis ทั้งหมด สั่ง flushdb ได้ครับ ไม่ต้อง restart อะไร
« แก้ไขครั้งสุดท้าย: 03 กุมภาพันธ์ 2021, 18:16:22 โดย icez » บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
down971863
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 12



ดูรายละเอียด
« ตอบ #2 เมื่อ: 04 กุมภาพันธ์ 2021, 01:16:42 »

ที่จริงไม่ได้อยากลบข้อมูลทั้งหมดครับแต่ว่า ram เต็มและที่ restart แล้วให้มันเขียนใหม่ก็เปลือง cpu ด้วย อยากทราบว่าทำยังไงให้มันเมื่อถึงเวลาหมดอายุแล้วมันลบทิ้งค่านั้น ๆ ออกไปเลยหรือกำหนดได้ไหมครับว่าอายุให้หายไปจาก memory
บันทึกการเข้า
down971863
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 12



ดูรายละเอียด
« ตอบ #3 เมื่อ: 04 กุมภาพันธ์ 2021, 01:32:06 »

อยากให้มันลบเฉพาะที่หมดอายุไปแล้วทิ้งไป
บันทึกการเข้า
romance69
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 169
ออฟไลน์ ออฟไลน์

กระทู้: 2,158



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 04 กุมภาพันธ์ 2021, 02:45:15 »

ลองไป config maxmemory เอาครับ เดี๋ยวมีคีย์ใหม่เข้ามามันจะลบคีย์ที่หมดอายุให้เอง
https://redis.io/topics/config

แก้ไขเพิ่มเติม ส่วน maxmemory-policy ใช้เป็น allkeys-lru หรือ volatile-ttl ก็ได้
allkeys-lru คือ จะลบคีย์ที่ไม่ค่อยมีการใช้งานออก
volatile-ttl คือ จะลบคีย์ที่ใกล้จะหมดอายุออก

ถ้า maxmemory หรือ maxmemory-policy มี # อยู่ข้างหน้าให้เอาลบด้วย
ตัวอย่าง # maxmemory 2gb เป็น maxmemory 2gb (หากรู้อยู่แล้วก็ขออภัยด้วย บอกไว้เพื่อคนไม่รู้เข้ามาอ่าน)

รายละเอียดเพิ่มเติม https://redis.io/topics/lru-cache
« แก้ไขครั้งสุดท้าย: 04 กุมภาพันธ์ 2021, 03:02:46 โดย romance69 » บันทึกการเข้า
down971863
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 12



ดูรายละเอียด
« ตอบ #5 เมื่อ: 05 กุมภาพันธ์ 2021, 09:11:38 »

ลองไป config maxmemory เอาครับ เดี๋ยวมีคีย์ใหม่เข้ามามันจะลบคีย์ที่หมดอายุให้เอง
https://redis.io/topics/config

แก้ไขเพิ่มเติม ส่วน maxmemory-policy ใช้เป็น allkeys-lru หรือ volatile-ttl ก็ได้
allkeys-lru คือ จะลบคีย์ที่ไม่ค่อยมีการใช้งานออก
volatile-ttl คือ จะลบคีย์ที่ใกล้จะหมดอายุออก

ถ้า maxmemory หรือ maxmemory-policy มี # อยู่ข้างหน้าให้เอาลบด้วย
ตัวอย่าง # maxmemory 2gb เป็น maxmemory 2gb (หากรู้อยู่แล้วก็ขออภัยด้วย บอกไว้เพื่อคนไม่รู้เข้ามาอ่าน)

รายละเอียดเพิ่มเติม https://redis.io/topics/lru-cache

ระบบของเราไม่สามารถทำตามคำแนะนำเบื้องต้นได้ครับเนื่องจาก key ที่ไม่ได้ใช้งานอาจมีการเรียกใช้งานได้ ว่าแต่ redis เองไม่มีขั้นตอนที่ทำให้เราสามารถลบ key ที่หมดอายุได้ใช่ไหมครับ ลองค้นหาในภาษาอังกฤษเอา google แปลก็เหมือนลบไม่ได้
บันทึกการเข้า
romance69
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 169
ออฟไลน์ ออฟไลน์

กระทู้: 2,158



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 05 กุมภาพันธ์ 2021, 10:45:43 »

ระบบของเราไม่สามารถทำตามคำแนะนำเบื้องต้นได้ครับเนื่องจาก key ที่ไม่ได้ใช้งานอาจมีการเรียกใช้งานได้
ก็คีย์ไหนหมดอายุมันก็ลบออก ถ้ามีการเรียกใช้คีย์นั่นใหม่มันก็เพิ่มมาใหม่ไงครับ
ถ้าไม่กำหนด max memory กับ memory policy ไว้ยังไง ram ก็เต็มนะครับ เพราะถ้าคีย์ไหนหมดอายุแต่ไม่มีการเรียกใช้งานมันก็ค้างอยู่ใน ram แบบนั่นแหละ
รายละเอียดผมก็ตามลิ้งก์ที่ส่งให้ ถ้าอ่านแล้วก็น่าจะเข้าใจได้

ส่วนถ้าจะลบคีย์ก็ลบได้แต่ต้องกำหนดคีย์เอาเองครับ ถ้าจะ clear key expire ทั้งหมดเลยทำไม่ได้นะ หรืออาจจะมีวิธีแต่ผมก็ไม่รู้เหมือนกันไม่เคยทำ
« แก้ไขครั้งสุดท้าย: 05 กุมภาพันธ์ 2021, 11:00:57 โดย romance69 » บันทึกการเข้า
icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,879



ดูรายละเอียด
« ตอบ #7 เมื่อ: 05 กุมภาพันธ์ 2021, 11:13:07 »

key ที่มี expire และ expire ไปแล้วมันก็ลบออกไปแล้วครับ... ในรายการนั้นคือ key ที่มี expire แต่ยังไม่หมดอายุครับ

บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
down971863
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 12



ดูรายละเอียด
« ตอบ #8 เมื่อ: 06 กุมภาพันธ์ 2021, 00:37:06 »

ขอบคุณครับ icez , romance69 ผมเข้าใจผิดไปเอง ผมอ่านแล้วคิดว่าใน info นั้น expire คือที่หมดอายุไปแล้วยังค้างอยู่ใน mem แต่มันเป็นจำนวน key ที่มีการตั้งหมดอายุ สรุปมันใช้ mem ถูกต้องของมันแล้วทำได้เพียงเพิ่มสเปค
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์