Redis是完全开源免费的,用C语言编写,是一个单线程、高性能的(key / value)内存数据库,基于内存运行并支持持久化的nosql数据库。
安装:
Installation From source code Download, extract and compile Redis with: $ wget https://download.redis.io/releases/redis-6.2.3.tar.gz $ tar xzf redis-6.2.3.tar.gz $ cd redis-6.2.3 $ make The binaries that are now compiled are available in the src directory. Run Redis with: $ src/redis-server You can interact with Redis using the built-in client: $ src/redis-cli redis> set foo bar OK redis> get foo "bar"
主要核心数据类型如下:
2.1、String 操作
我们平时在使用redis存储一个对象的时候,一般都是set userId JSON. 存储前将user序列化成json,获取的时候根据userId获取,然后反序列化成对象。这样比较直观和简单,但是存在一些问题,就是不太灵活。
还有一个中存储方式是,按照key(对象名:ID:属性), value(属性内容)去存储,这样数据结构就是:
set user:1:name test set user:1:money 9999
127.0.0.1:6379> get user:1:money "9999" 127.0.0.1:6379> get user:1:name "test" 127.0.0.1:6379>
这样我们就可以直接获取到对象的属性,而且如果某个属性修改的时候,就可以更方便的只对某个属性进行修改了。不过这样的缺点,就是key会比较多。
当key不存在的时候才会设置成功并返回1,key已经存在的话设置失败返回0.
可以使用redis的incrby命令生成分布式系统全局ID,类似于雪花算法。
但是这个命令每次执行就加1,获取到一个新的全局ID。但是如果每次都这样来生成ID,那么redis压力太大了,所以我们可以直接增加1000,想等于一次生成1000个id,然后本机内存中保存加了1000后的这个数,然后在维护一个增长的数字当做ID。如果到达1000,继续去redis生成一个加1000的。目的是减少和redis的交互。
127.0.0.1:6379> incrby orderId (error) ERR wrong number of arguments for 'incrby' command 127.0.0.1:6379> incrby orderId 1 (integer) 1 127.0.0.1:6379> get orderId "1" 127.0.0.1:6379> incrby orderId 1 (integer) 2 127.0.0.1:6379> 127.0.0.1:6379> get orderId "2" 127.0.0.1:6379> incrby orderId 100 // 一下增长100个 (integer) 102 127.0.0.1:6379> get orderId "102" 127.0.0.1:6379>
2.2、Hash 操作
我们可以使用Hash数据结构来缓存一些对象。但是如果用户表user中有几十万条记录,那么此时redis中会缓存大量的数据。当我们使用hgetall key的时候,一下子可能会返回几十倍的数据,redis可能要执行非常久的时间!这样redis就会直接阻塞其他命令。Redis最怕的就是bugkey.