文章目录
- 概述
- 安装编译
- string数据结构
- 基础命令
- 应用
- 对象存储
- 累加器
- list结构
- 基础命令
- 应用
- 栈(先进后出FILO)
- 队列
- HASH
- 基础命令
- 存储结构
- 应用
- 存储对象
- 小结
概述
redis 是一个远程字典服务;当然,redis是内存数据库,kv数据库,最基础的数据结构有(string, list, hash, set, zset)几种。
安装编译
在ubuntu云服务器上安装,有以下步骤:
git clone https://gitee.com/mirrors/redis.git -b 6.2
cd redis/
make
make test
sudo make install
string数据结构
字符数组,redis字符串是二进制安全字符串,可以存储图片等二进制数据;
内部实际存储根据string的数据特征可以采用int, embstr, raw存储。
基础命令
set key val
get key
执行原子加一的操作
incr key
incrby key increment
decr key
decrby key decrement
setnx key value
del key
应用
应用方面比较多,主要用于对象存储,累加器等。
对象存储
set role:100001 '{["name"]: "a", ["sex"]:"male", ["age"]:20}'
get role:100001
#这个格式比较固定,几乎都是如此存储的
累加器
#统计数量 累计加1
incr times
# 累计加到1000
incrby times 1000
list结构
对于list来说,它是一个首尾相连接的双向链表,链表首尾操作时间复杂度O(1);查找中间元素时间复杂度O(n);
列表中数据可能会被压缩:
- 元素长度小于48,不压缩;
- 元素压缩前后长度不超过8,不压缩;
基础命令
#左侧插入 左侧获取key
LPUSH key value
LPOP key#右侧插入 右侧获取key
RPUSH key value
RPOP keyLRANGE key start end
LREM key count value
应用
栈(先进后出FILO)
LPUSH + LPOP
# 或者
RPUSH + RPOP
队列
LPUSH + RPOP
#或者
RPUSH + LPOP
HASH
字典结构,通过hash函数(而不是通过比较key的方式)来确定节点的位置,hash这个数据结构不多介绍,可以参考我之前的文章。
基础命令
HGET key field
HSET key field valueHMSET key field1 value1 field2 value2
HMGET key field1 field2HINCRBY key field increment
HLEN keyHDEL key field
存储结构
当节点数量少的时候并且字符串长度小的时候,内部采用压缩列表存储,否则采用字典实现;
应用
存储对象
hmset hash:10001 name a age 18 sex male# 与 string 比较
set hash:10001 '{["name"]:"a",["sex"]:"male",["age"]:18,["money"]:1000000}'# 假设现在修改 a的年龄为29岁
# hash:hset hash:10001 age 29# string: get role:10001# 将得到的字符串调用json.decode解密,取出字段,修改 age 值# 再调用json加密set role:10001 '{["name"]:"a",["sex"]:"male",["age"]:29}
小结
当然了,redis是一个内存数据库,存储在内存当中;如果遇到服务器宕机,这些数据就不存在了,所以有些数据需要配合mysql数据库一起使用。这篇写的是redis的基础部分,数据结构也写了几个,感觉还好,可以一起来学习学习。OK,翻篇。