hset์ ํตํด ์ค์ ๋๋ ํค์ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ "null" ๋ฌธ์์ด๋ก ์ง๋ ฌํ๋ฉ๋๋ค. hgetall์ ํตํด ํด์๋ฅผ ๊ฒ์ํ ๋ ๋ฐํ๋ ๊ฐ์ฒด์ ํด๋น ๊ฐ์ null์ด ์๋ "null" ๋ฌธ์์ด์ ๋๋ค.
node-redis๋ redis์์ ๊ฐ์ ธ์จ ๋ฌธ์์ด ๊ฐ์ ๋ํด ๋ฐ์ดํฐ ์ ํ ๋ณํ์ ์ํํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ถ์ธ, ์ซ์ ๋ฑ์ด ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ์ผ๋ก ์๋ ๋ณํ๋ ๊ฒ์ด๋ผ๊ณ ์๋ฌต์ ์ผ๋ก ๊ฐ์ ํ์ต๋๋ค. ์ด๊ฒ์ด ํ๋ก์ ํธ์ ๋ฒ์์ ์ํ์ง ์๋๋ค๊ณ ์๊ฐ๋๋ฉด ์ด์๋ฅผ ์ข ๋ฃํ์ญ์์ค.
ํ์ง๋ง ์๋ ๋ณํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. false ๊ฐ์ด "false"๋ก ๊ฒ์๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ง์ค ๊ฒ์ฌ ์กฐ๊ฑด์ ํต๊ณผํ์ฌ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ์๋นํ ์๊ฐ์ ํ ์ ํ์ต๋๋ค.
๋ง์์, ์ฐธ/๊ฑฐ์ง๋ ์ ๋ฅผ ์ฌ๋ก์ก๋ ๊ฒ์ ๋๋ค.
ํ์คํ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ค์ ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ต๋๋ค.
@brycebaril JSON.stringify/parse ์ ๋ ฅ์ ํ๋๊ทธ๋ฅผ ๋์ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ข์ ํด๊ฒฐ์ฑ ์ด์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์์ต๋๊น?
createClient ์์ฑ์์ ์ต์
์ด ์์ ์ ์์ต๋๋ค. ๋ญ๊ฐ...
_parse_bool_: "true"๋ฅผ true๋ก, "false"๋ฅผ false๋ก ๋ณํํฉ๋๋ค.
_parse_null_: "null"์ null๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ฌ๋ "true"์ "null"์ ์ค์ ๋ฌธ์์ด ๊ฐ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น์? ์๋ ์ ๋ ฅ ์ ํ์ด ๋ฌด์์ธ์ง ๊ฐ์งํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@dirkbonhomme ์ @Azmisov ๋ ์ด๊ฒ์ด ์ข์ ํด๊ฒฐ์ฑ ์ด
ํน์ ๋ช ๋ น ๊ธฐ๋ฐ์ด ์๋๋ผ ๋ชจ๋ ๋ช ๋ น์ ๋ํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ฑ๋ฅ ์ ํ๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์จ๋ ๋ชจ๋ ์ธ์๋ฅผ ํ์ธํ๊ณ ๋ ์ค์ํ๊ฒ๋ ์ธ์(๋ฐฐ์ด, ๊ฐ์ฒด, ์ธ์)๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ๋ชจ๋ ๋ช ๋ น์ ๋ํด ํด๊ฒฐ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ช
๋ น์ ์ ์๋์ง ์์๊ฑฐ๋ null ๊ฐ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด๊ฒ์ ๊ฑฐ์ ํญ์ ์ ๋ฌ๋ ์ธ์์ ๋ฌธ์ ๊ฐ ์๋ค๋ ์ ํธ์
๋๋ค.
์ด๋ค ์ฌ๋๋ค์ ์ ์๋์ง ์์๊ฑฐ๋ null ๊ฐ์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ํ ์ ์์ผ๋ฏ๋ก ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ ์ต์
์ ์ถ๊ฐํ๊ณ ๋ช
๋ น์ null/์ ์๋์ง ์์ ๊ฐ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ด ํจ์๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
ํด๋น ํจ์๋ ํญ์ ๋ช
๋ น ์ด๋ฆ๊ณผ ์ ๋ฌ๋ ์ธ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ฐํ ๊ฐ์ ์๋ ์ธ์๋ฅผ ๋์ฒดํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ์ด๋ฌํ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ฐธ/๊ฑฐ์ง์๋ ๋์ผํ ๋
ผ๋ฆฌ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
@NodeRedis/๊ธฐ๊ณ ์ @dirkbonhomme ์ด๋ป๊ฒ ์๊ฐํ์ธ์? :)
@BridgeAR ๋๋ null
๊ฐ '๋ญ๊ฐ ์๋ชป๋์๋ค๋ ์ ํธ'๋ผ๋ ๋ฐ ๋์ํ์ง ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์ธ์.
var myIndexes = ['one','two','three'], myMulti = client.multi();
myIndexes.forEach(function(aKey) {
myMulti.hget(aKey,'username');
myMulti.hget(aKey,'address1');
myMulti.hget(aKey,'address2');
});
myMulti.exec(cb);
๋ฐ์ดํฐ์์ 'address2'๊ฐ ์ ํ ์ฌํญ์ธ ๊ฒฝ์ฐ null
๋ฐํ์ ๊ด์ฐฎ์ต๋๋ค.
์ฆ, ๋ง์ ์ฌ๋๋ค์๊ฒ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ด ๋ ๊ฒ์ด๋ฏ๋ก ์ ์ํ์ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋๋ผ ์ ํ ์ฌํญ์ด์ด์ผ ํฉ๋๋ค.
@stockholmux ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฐํ ๊ฐ์ ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
๋ด๊ฐ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒ์ null
๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ 'null'
๋ฌธ์์ด์ด ์์ฑ๋๋ค๋ ๊ฒ์
๋๋ค.
client.set('foo', null);
client.get('foo', function (err, res) {
console.log(res); // 'null'
});
์ด์ ๋์์ ์ค๋จํ๊ณ (์ผ๋ถ ์ฌ๋๋ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์๋ชป๋ ๋์์ ์์กดํ ์ ์์) ์ง๊ธ ๋น์ฅ ์ง์ ์ฒ๋ฆฌํ๊ณ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ ์ต์ ์ ์ถ๊ฐํ ๊ณํ์ด๋ฏ๋ก ์๋ฌด ๊ฒ๋ ์ค๋จํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ๋ํ v.3.0.0.
'null' ๊ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
์ค์ null ๊ฐ์ ๋ํ๋ด๋ ํน์ ํ ํฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ํ์๊ฒ ์ต๋๊น? ์ฌ์ฉ์๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ null๋ก ์ค์ ํ๋ฉด ํด๋น ๋ช ๋ น์ ์บก์ฒํ๊ณ null ๊ฐ์ ํน์ ํ ํฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์ฌ์ฉ์๊ฐ ํด๋น ๊ฒ์ ๊ฐ์ ธ์ค๋ฉด ํด๋น ๋ช ๋ น์ ์บก์ฒํ๊ณ ํน์ ํ ํฐ์ ์ฌ์ฉ์์๊ฒ ์ค์ null ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
๊ทธ๋ฅ ์ ์์ ๋๋ค. ์ด ๋ฌธ์ ๋ ์ ๋ง ๊ท์ฐฎ์ต๋๋ค. ๋ชจ๋ ์ฌ์ดํธ์ ๋ชจ๋ ์ฌ์ฉ์๋ 'null' ์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ค์ null ๊ฐ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค.
"JSON.{parse,stringify} on input" ํ๋๊ทธ์ ๋ํ ์งํ์ด๋ ๊ฒฐ์ ์ด ์์์ต๋๊น? ์ฃผ์ด์ง get/set ๋ก์ง ๋์ ์๋์ผ๋ก ์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ ํ์ธ์ @taylorzane ํ์ฌ ์๊ฐ์ด ๊ฑฐ์ ์์ง๋ง ๊ตฌํํ ๊ณํ์ ๋๋ค.
์ข์ ์์์ ๋๋ค. ์๊ฐ์ด ์๋ค๋ฉด ํ ๋ฒ ์ฐ๋ฌ๋ณผ ์ ์์ผ๋ฉด ์ ๋ง ์ข๊ฒ ๊ณ , ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋์ ์์ค๋ฅผ ํดํนํ๋ ๊ฒ์ ์ฆ๊น๋๋ค. :+1:
์ง๊ธ ์๋ํฉ๋๊น?
๋๋ ๋ฐ์ดํฐ๋ฅผ Redis๋ก ์ง๋ ฌํํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค.
@taylorzane์ ๊ณต์ ํ๋ ์์ต๋๊น ?
@slidenerd JSON ๊ฐ์ฒด๋ฅผ ๋ณํฉํ ๋ค์ ๋ณํฉ๋ ๊ฐ ๋ ธ๋์ ๊ฐ์ Redis์ ์ ์ฅํ๊ธฐ ์ ์ ์ง๋ ฌํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ฐ์ ๋ฌธ์์ด์ ๋๋ค. ์์ฒ ๊ฐ์ ๊ฐ์ด ์ญ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋๋๋ผ๋ ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฐ์ด๋ฉ๋๋ค.
์์:
const a = {
a: {
b: {
c: null,
d: true,
e: "hello"
}
}
}
const b = flatten(a)
console.log(b) /* =>
{
'/a/b/c': null,
'/a/b/d': true,
'/a/b/e': 'hello'
}
*/
Object.entries(b).forEach(([key, value]) => {
redis.set(key, JSON.stringify(value)) // or
redis.hset('my_hash', key, JSON.stringify(value)) /*
=> "/a/b/c" -> "null"
=> "/a/b/d" -> "true"
=> "/a/b/e" -> "\"hello\""
*/
})
๋ ๋ง์ ์ง์นจ์ด ํ์ํ๋ฉด Gitter์์ ๋๋ ๋ด ํ๋กํ์ ์ด๋ฉ์ผ์ ํตํด ์ธ์ ๋ ์ง ์ ์๊ฒ ์ฐ๋ฝํ์ญ์์ค.
@slidenerd ๋ค๋ฅธ ์ต์ ์ ReJSON ์ ์ฌ์ฉํ์ฌ JSON ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ ์๋์ผ๋ก ์ง๋ ฌํํ๊ณ null ๋ฐ undefined๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ ๋์ ์ต์ ์ ๋๋ค. Redis ๋ชจ๋์ด๋ฏ๋ก ์ด๋ฅผ ์ง์ํ๋ ๋ฒ์ (4.0 ์ด์)์ด ์์ด์ผ ํ๋ฉฐ ๋ชจ๋์ ์๋ฒ์ ์ค์นํด์ผ ํฉ๋๋ค. ์ด Node.js ๋ชจ๋(๋ฐ ์ด ๋ฌธ์ )์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
items.push(JSON.stringify(object, (key, value) => {
if (value === null || value === undefined) {
return undefined
}
else {
return isNaN(parseFloat(value)) ? value : parseFloat(value)
}
}))
@stockholmux ๋๋ถ์ ์ธ๋ถ ์ข ์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋์ ์๋ฃจ์ ์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
node-redis๋ redis์์ ๊ฐ์ ธ์จ ๋ฌธ์์ด ๊ฐ์ ๋ํด ๋ฐ์ดํฐ ์ ํ ๋ณํ์ ์ํํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ถ์ธ, ์ซ์ ๋ฑ์ด ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ์ผ๋ก ์๋ ๋ณํ๋ ๊ฒ์ด๋ผ๊ณ ์๋ฌต์ ์ผ๋ก ๊ฐ์ ํ์ต๋๋ค. ์ด๊ฒ์ด ํ๋ก์ ํธ์ ๋ฒ์์ ์ํ์ง ์๋๋ค๊ณ ์๊ฐ๋๋ฉด ์ด์๋ฅผ ์ข ๋ฃํ์ญ์์ค.
ํ์ง๋ง ์๋ ๋ณํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. false ๊ฐ์ด "false"๋ก ๊ฒ์๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ง์ค ๊ฒ์ฌ ์กฐ๊ฑด์ ํต๊ณผํ์ฌ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ์๋นํ ์๊ฐ์ ํ ์ ํ์ต๋๋ค.