Merge pull request #7 from bigeagle/upstream

Redis option and only cache successful lookups
This commit is contained in:
kenshin 2015-02-05 23:36:13 +08:00
commit e145ef8873
4 changed files with 25 additions and 7 deletions

View File

@ -37,6 +37,7 @@ maxcount = 0 #If set zero. The Sum of cache itmes will be unlimit.
#If set false, will not query hosts file and redis hosts record
enable = false
host-file = "/etc/hosts"
redis-enable = true
redis-key = "godns:hosts"
ttl = 600

View File

@ -147,7 +147,7 @@ func (h *GODNSHandler) do(Net string, w dns.ResponseWriter, req *dns.Msg) {
w.WriteMsg(mesg)
if IPQuery > 0 {
if IPQuery > 0 && len(mesg.Answer) > 0 {
err = h.cache.Set(key, mesg)
if err != nil {

View File

@ -2,6 +2,7 @@ package main
import (
"bufio"
"errors"
"net"
"os"
"regexp"
@ -17,8 +18,14 @@ type Hosts struct {
func NewHosts(hs HostsSettings, rs RedisSettings) Hosts {
fileHosts := &FileHosts{hs.HostsFile}
redis := &redis.Client{Addr: rs.Addr(), Db: rs.DB, Password: rs.Password}
redisHosts := &RedisHosts{redis, hs.RedisKey}
var rc *redis.Client
if hs.RedisEnable {
rc = &redis.Client{Addr: rs.Addr(), Db: rs.DB, Password: rs.Password}
} else {
rc = nil
}
redisHosts := &RedisHosts{rc, hs.RedisKey}
hosts := Hosts{fileHosts.GetAll(), redisHosts}
return hosts
@ -69,17 +76,26 @@ type RedisHosts struct {
}
func (r *RedisHosts) GetAll() map[string]string {
if r.redis == nil {
return map[string]string{}
}
var hosts = make(map[string]string)
r.redis.Hgetall(r.key, hosts)
return hosts
}
func (r *RedisHosts) Get(domain string) (ip string, ok bool) {
if r.redis == nil {
return "", false
}
b, err := r.redis.Hget(r.key, domain)
return string(b), err == nil
}
func (r *RedisHosts) Set(domain, ip string) (bool, error) {
if r.redis == nil {
return false, errors.New("Redis not enabled")
}
return r.redis.Hset(r.key, domain, []byte(ip))
}

View File

@ -55,10 +55,11 @@ type CacheSettings struct {
}
type HostsSettings struct {
Enable bool
HostsFile string `toml:"host-file"`
RedisKey string `toml:"redis-key"`
TTL uint32 `toml:"ttl"`
Enable bool
HostsFile string `toml:"host-file"`
RedisEnable bool `toml:"redis-enable"`
RedisKey string `toml:"redis-key"`
TTL uint32 `toml:"ttl"`
}
func init() {