You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

leveldb.go 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2020 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package caches
  5. import (
  6. "log"
  7. "github.com/syndtr/goleveldb/leveldb"
  8. )
  9. // LevelDBStore implements CacheStore provide local machine
  10. type LevelDBStore struct {
  11. store *leveldb.DB
  12. Debug bool
  13. v interface{}
  14. }
  15. var _ CacheStore = &LevelDBStore{}
  16. func NewLevelDBStore(dbfile string) (*LevelDBStore, error) {
  17. db := &LevelDBStore{}
  18. h, err := leveldb.OpenFile(dbfile, nil)
  19. if err != nil {
  20. return nil, err
  21. }
  22. db.store = h
  23. return db, nil
  24. }
  25. func (s *LevelDBStore) Put(key string, value interface{}) error {
  26. val, err := Encode(value)
  27. if err != nil {
  28. if s.Debug {
  29. log.Println("[LevelDB]EncodeErr: ", err, "Key:", key)
  30. }
  31. return err
  32. }
  33. err = s.store.Put([]byte(key), val, nil)
  34. if err != nil {
  35. if s.Debug {
  36. log.Println("[LevelDB]PutErr: ", err, "Key:", key)
  37. }
  38. return err
  39. }
  40. if s.Debug {
  41. log.Println("[LevelDB]Put: ", key)
  42. }
  43. return err
  44. }
  45. func (s *LevelDBStore) Get(key string) (interface{}, error) {
  46. data, err := s.store.Get([]byte(key), nil)
  47. if err != nil {
  48. if s.Debug {
  49. log.Println("[LevelDB]GetErr: ", err, "Key:", key)
  50. }
  51. if err == leveldb.ErrNotFound {
  52. return nil, ErrNotExist
  53. }
  54. return nil, err
  55. }
  56. err = Decode(data, &s.v)
  57. if err != nil {
  58. if s.Debug {
  59. log.Println("[LevelDB]DecodeErr: ", err, "Key:", key)
  60. }
  61. return nil, err
  62. }
  63. if s.Debug {
  64. log.Println("[LevelDB]Get: ", key, s.v)
  65. }
  66. return s.v, err
  67. }
  68. func (s *LevelDBStore) Del(key string) error {
  69. err := s.store.Delete([]byte(key), nil)
  70. if err != nil {
  71. if s.Debug {
  72. log.Println("[LevelDB]DelErr: ", err, "Key:", key)
  73. }
  74. return err
  75. }
  76. if s.Debug {
  77. log.Println("[LevelDB]Del: ", key)
  78. }
  79. return err
  80. }
  81. func (s *LevelDBStore) Close() {
  82. s.store.Close()
  83. }