redis
redis(REmote DIctionary Server),基于ANSI C语言编写的一个内存型NoSQL数据库(也可以持久化存储),性能极强,使用键值数据存储,提供多种语言的API。
之前的redis是单线程的(广义上来说,其实还有后台线程),因为所有命令都是串行的交给一个线程来处理,而最新的redis是支持多线程的。
redis的安装
之前使用传统的安装方式在Linux上安装redis,第一次搞得时候折腾了我几个小时。
这次就使用docker安装redis,方便快捷,
最后启动redis
通用命令
keys [pattern]
根据符号匹配查询,比如keys *
查询所有
del key
删除指定key
exists key
判断key是否存在
type key
获取key的类型
expire key second
设置key的有效期,到期就删除
ttl
获取key的有效期(不存在返回-2,存在且没有有效期返回-1,否则返回剩余时间)
presist key
将有效期key转换为永久性key
五个基础数据结构
对于redis来说,key都是字符串,而value有五种基础类型。但是对于每个基础类型的数据结构,在其底层也有不同的内部编码(也就是底层的实现),就如同HashMap内部有链表和红黑树。
编码方式可以通过object encoding key
来查看
string
字符串类型,虽然是string类型,其实可以有多种类型,比如字符串、整数型。经常用于缓存,比如存储json数据等。
一个字符串类型最大不能超过512MB,这个大小通常是用不到的。字符串中数值类型也是有上限的,也就是Java中long类型的最大值(263-1,通常也是接触不到的)。
内部编码
- int:保存long类型的有符号整型,超出范围的数字则记为其他的字符串编码
- raw:保存长度大于44字节的字符串
- embstr:保存长度小于等于44字节的字符串
常见命令:
set key value
设置指定key的值
mset key1 value1 key2 value2..
. 批量设置key的值
get key
获取指定key的值
mget key1 key2 ...
批量获取key的值
incr key
数据类型自增1(非数据类型或超出范围会报错)
decr key
数据类型自减1
strlen key
返回指定key的字符串值的长度
hash
hash的存储类型,有些类似于Java中的HashMap结构,也就是一个哈希表结构。Hash中有field和value属性,也就是key-filed-value,可以将key-hash