怎么提高系统数据读写速度?除了提升内存、磁盘的硬件性能,软件方面有没有什么能够协助提升数据读写性能的呢?还真有,就是redis这一款非关系型数据库软件,具有极高的读写性能,今天就来研究下一下。
redis是一款开源、使用c语言编写完成,基于内存可以持久化的高性能键值数据库。性能怎么个好法,读写速度分别为1100000、81000次每秒。数据类型也丰富,不止key-value,还有list、set、hash等数据结构,支持主从备份、支持将内存数据保存到磁盘。
再来说说redis作者Salvatore Sanfilippo,意大利人,有艺术家的气息,人家确实也去从事艺术去了,从2020年开始,它就停止了他的程序员职业生涯,加入了作家的行列,现在全职写小说。他的第一部科幻小说wohpe意大利语版本今年7月15面世,英文版还没出来得等到今年冬天出版,主要讲人工智能、人类与技术的相互作用,有点期待。
Salvatore Sanfilippo
作者为什么不从事程序员?在他博客上,他表明“现代编程正在变得复杂,无趣,充满了只需要粘合的层。它正在失去大部分的美丽。从这个意义上说,大多数编程不再是艺术,也不是高级工程(大多数在大公司和小公司编写的程序都是微不足道的:程序员只需要理解某些临时抽象,并编写一些逻辑和胶水代码)。只有极少数程序员面对编程的艺术面貌。只有极少数程序员在编程中面临高工程性。”读到这段话,自己确实有点同感,因为目前都是朝着编程拖拉拽搭积木的方向发展,人工智能的发展也会让很多人失去工作。
在使用前,基本的数据结构得明白,比如一下几种:
(1)string字符串
(2)hash散列
(3)list列表
(4)set集合
(5)sorted set 有序集合
软件地址redis.io
mac、windos平台的大家可以下载对应的包进入目录直接运行即可,也有相关的连接客户端大家可以用一下看看,这里着重介绍下linux环境下的安装。
(1)安装相关依赖
yum install -y gcc tcl
(2)上传redis源码包并解压
(3)进入目录编译,执行命令make、make install
(4)默认安装在/usr/local/bin目录,修改redis.conf文件,将bind修改为0.0.0.0这样就可以远程访问了,requirepass设置密码,其余的可以用默认配置
(5)启动 /usr/local/bin/redis-server /etc/redis.conf
(6)登录 redis-cli -h -p 6379
(7)验证心跳
(8)可以设置为systemd服务,即可开机自启
(1)string的常见命令:set添加键值对、get根据key获取value、mset批量添加键值对,mget根据多个key获取多个value、strlen获得value的长度,其余命令的就得自己研究了
(2)hash是一个键值对集合,对应的数据结构有两种,ziplist压缩列表和hashtable哈希表,常见命令:hset key field value添加修改hash类型的filed的值、hget key field获取hash类型key的field的值,hmget批量获取多个hash值、hgetall获取一个hash类型key中所有的field和value。
(3)list列表:lpush key element 在列表左侧插入一个或多个元素、lpop key溢出并返回列表左侧的第一个元素、rpush key elment 在列表右侧插入一个或多个元素,rpop key移除并返回列表右侧的第一个元素,llen <key> 获得列表长度。
(4)set集合:sadd key member 向集合添加一个或多个元素、srem key member移除set中的指定元素、smembers key 获取set中的所有元素
学会对应类型的增删改查,就基本能应付工作日常所需了。
(1)引入依赖,jedis是官方推荐的java连接开发工具,开发中要想使用好redis,必须对jedis熟悉。
代码语言:javascript复制 <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
(2)创建使用
Jedis jedis = new Jedis("localhost", 6379); //指定Redis服务ip端口
jedis.auth("xxxx"); //如果Redis服务连接需要密码
jedis.set(“key”,”hello cillian”)
String value = jedis.get("key"); //访问Redis服务
System.out.println(key);
jedis.close(); //使用完关闭连接
(3)Jedis连接池
public class Demo {
private static JedisPool jedisPool = null;
static {
//配置连接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(8);
jedisPoolConfig.setMaxIdle(8);
jedisPoolConfig.setMinIdle(0);
jedisPoolConfig.setMaxWaitMillis(200);
//创建连接池对象
jedisPool = new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000,"132537");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
到这里,对于redis的基础应该有一个大致了解,快去实践吧,祝学习顺利!
END
作者|希里安