Fix expiration and upppercase check (#72)
This commit is contained in:
@@ -92,13 +92,13 @@ impl Set {
|
|||||||
|
|
||||||
// Attempt to parse another string.
|
// Attempt to parse another string.
|
||||||
match parse.next_string() {
|
match parse.next_string() {
|
||||||
Ok(s) if s == "EX" => {
|
Ok(s) if s.to_uppercase() == "EX" => {
|
||||||
// An expiration is specified in seconds. The next value is an
|
// An expiration is specified in seconds. The next value is an
|
||||||
// integer.
|
// integer.
|
||||||
let secs = parse.next_int()?;
|
let secs = parse.next_int()?;
|
||||||
expire = Some(Duration::from_secs(secs));
|
expire = Some(Duration::from_secs(secs));
|
||||||
}
|
}
|
||||||
Ok(s) if s == "PX" => {
|
Ok(s) if s.to_uppercase() == "PX" => {
|
||||||
// An expiration is specified in milliseconds. The next value is
|
// An expiration is specified in milliseconds. The next value is
|
||||||
// an integer.
|
// an integer.
|
||||||
let ms = parse.next_int()?;
|
let ms = parse.next_int()?;
|
||||||
@@ -146,6 +146,16 @@ impl Set {
|
|||||||
frame.push_bulk(Bytes::from("set".as_bytes()));
|
frame.push_bulk(Bytes::from("set".as_bytes()));
|
||||||
frame.push_bulk(Bytes::from(self.key.into_bytes()));
|
frame.push_bulk(Bytes::from(self.key.into_bytes()));
|
||||||
frame.push_bulk(self.value);
|
frame.push_bulk(self.value);
|
||||||
|
if let Some(ms) = self.expire {
|
||||||
|
// Expirations in Redis procotol can be specified in two ways
|
||||||
|
// 1. SET key value EX seconds
|
||||||
|
// 2. SET key value PX milliseconds
|
||||||
|
// We the second option because it allows greater precision and
|
||||||
|
// src/bin/cli.rs parses the expiration argument as milliseconds
|
||||||
|
// in duration_from_ms_str()
|
||||||
|
frame.push_bulk(Bytes::from("px".as_bytes()));
|
||||||
|
frame.push_int(ms.as_millis() as u64);
|
||||||
|
}
|
||||||
frame
|
frame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user