当前位置: 首页 > news >正文

redis初步认识(一)

文章目录

  • 概述
    • 安装编译
  • 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);
列表中数据可能会被压缩:

  1. 元素长度小于48,不压缩;
  2. 元素压缩前后长度不超过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,翻篇。

http://www.lryc.cn/news/380705.html

相关文章:

  • Android 开发必备知识点及面试题汇总(Android+Java+算法+性能优化+四大组件……
  • 安装Cmakeffmpeglibssh
  • 计算机网络实验(9):路由器的基本配置和单臂路由配置
  • ArcGIS与Excel分区汇总统计三调各地类面积!数据透视表与汇总统计!
  • QML 中宽度、高度与隐式宽度/高度的区别及其应用场景
  • 如何利用AopContext.currentProxy()解决事务管理中的方法调用问题
  • VMware虚拟机下载安装Windows Server 2016
  • springboot vue 开源 会员收银系统 (7) 收银台的完善 新增开卡 结算
  • 虚拟现实环境下的远程教育和智能评估系统(十三)
  • 深入了解软件设计模式:创新应用与优化代码结构
  • android studio 模拟器文件查找
  • 【科普】半导体制造过程的步骤、技术、流程
  • c89、c99、c11
  • 【网络安全的神秘世界】已解决burpsuite报错Failed to start proxy service on 127.0.0.1:8080
  • 【C#】使用数字和时间方法ToString()格式化输出字符串显示
  • Mac系统主机名变为bogon的解决方案
  • 行列式和矩阵的区别
  • MATLAB复习
  • Android11 动态权限申请
  • 线性卷积(相关)和圆周卷积(相关)以及FFT之间的关系(AEC举例)
  • AMD平台,5600X+6650XT,虚拟机安装macOS 14(2024年6月)
  • Spring源码之手写DI
  • 从零入手人工智能(5)—— 决策树
  • go语言:两协程并发交替打印数字和字母(代码逐行注释)
  • TWM论文阅读笔记
  • 探索ChatTTS项目:高效的文字转语音解决方案
  • [Django学习]Q对象实现多字段模糊搜索
  • transdreamer 论文阅读笔记
  • AIGC技术的发展现状与未来趋势探讨
  • Postman Postman接口测试工具使用简介