SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash), zset(sorted set),qlist(队列) 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据.
- SSDB 是稳定的, 生产环境使用的, 已经在许多互联网公司得到广泛使用, 如奇虎 360, TOPGAME.
- ssdb是一款类似于redis的NoSQL数据库,不过redis是基于内存的,服务器比较昂贵,ssdb则是基于硬盘存储的,很容易扩展,对于一些对速度要求不是太高的应用,还是不错的选择。
- SSDB是一套基于LevelDB存储引擎的非关系型数据库(NoSQL),可用于取代Redis,更适合海量数据的存储。
一、缓存服务器的搭建
ssdb搭建缺陷是:没有docker安装文档 ,不带配置文件(dokcerHub)
1、ssdb配置文件准备
# ssdb-server config
# relative to path of this file, must exist
work_dir = /ssdb/var
pidfile = /run/ssdb.pid
server:
#一定不建议ssdb配置密码,因为ssdb默认密码32位
ip: 0.0.0.0 #允许所有人访问
port: 8888
replication:
binlog:yes
sync_speed:-1
slaveof:
# sync|mirror, default is sync
#type: sync
#ip: 127.0.0.1
#port: 8889
logger:
level: info
output: stdout
rotate:
size: 1000000000
leveldb:
# in MB
cache_size: 500
# in MB
write_buffer_size: 128
# in MB
compaction_speed: 100
# yes|no
compression: yes
2、ssdb安装(docker)
docker run -d --name han_ssdb -p 8888:8888 -v /ssdb/var:/ssdb/var -v /config/ssdb.conf:/config/ssdb.conf leobuskin/ssdb-docker
- -p:指定端口映射
- -v:指定文件映射
- -d:指定后台运行
- --name:为docker容器命名
注:安装完后,使用firewalld打开需要提供支持的端口
3、ssdb客户端(可视化)
(1)首先查看容器的ip
docker inspect 容器名
(2)ssdb-admin安装
docker run -d --env DB_CONFIG=172.17.0.2:8888 -p 5000:5000 jhao104/ssdb-admin
注:创建容器后,需要使用firewalld开启端口。此外还需要把DB_CONFIG的地址指成ssdb容器的地址
如果不能完成映射,重启doocker,完了再次重启全部容器
二、Java代码操作ssdb
1、导包
ssdb同样导的是redis的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、容器类的测试(spring-boot-starter-test)
@RunWith(SpringRunner.class) //设置SpringRunner
@SpringBootTest(classes = AdminRun.class) //设置启动类,默认会扫包
public class HanRedis {
@Resource
RedisTemplate<String,String> redisTemplate;
@Test
public void handler() {
redisTemplate.opsForValue().set("hanmh", "My name is hanmh!!!", 60, TimeUnit.SECONDS);
}
}
执行后报错:
默认是字节流方式存进去的,不是字符流
3、数据存储报错解决
对RedisTemplate做一个序列化处理,再将其进行返回使用
@Resource
RedisTemplate<String, String> redisTemplate;
//返回序列化处理后的RedisTemplate
@Bean
RedisTemplate getRedisTemplate() {
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(stringRedisSerializer);
return redisTemplate;
}