Redis基础指令学习

本文讲解在linux环境下对开源项目Redis基础操作的学习,Redis 是一款高性能、基于内存 的开源键值对数据库,数据读写几乎都在内存完成,速度极快;同时支持字符串、哈希、列表、集合等多种数据结构,不只是简单缓存。

一、建立Redis环境

复制代码
// github中下载最新版本的redis
git clone https://github.com/redis/redis.git
// 编译
make
// 测试
make test
// 安装(可能需要管理员权限)
sudo make install

为了便于使用,新建一个存放redis配置文件的文件夹

复制代码
mkdir redis_data
cp redis/redis-server redis_data/redis-server

启动redis

bash 复制代码
// 后台运行
redis-server redis.conf --daemonize yes
// 检测是否启动成功
ps aux | grep redis-server
// 输出结果
// zhou        2116  0.3  0.0 134552  5972 ?        Ssl  08:51   0:00 redis-server 127.0.0.1:6379
// zhou        2137  0.0  0.0   6612  2256 pts/0    S+   08:52   0:00 grep --color=auto redis-server
// ip为127.0.0.1
// 接口为6379

redis数据性质

设置和添加的时候自动创建,没有单独用来创建的指令

数据为空时自动删除

全局指令

// 建立连接

redis-cli

// 检查指定key的数据类型

type key

// 删除指定key

del key

// 打印所有key

keys *

// 删除所有key

flushall

二、Redis支持的数据类型

1.string--单体键值存储

1)基础命令

bash 复制代码
// 添加数据
127.0.0.1:6379> set student avogado6
// 返回结果
OK
// 获取数据
127.0.0.1:6379> get student
// 返回结果
"avogado6"

// 整形数据加减操作
// +1
127.0.0.1:6379> incr count
(integer) 101
// +10
127.0.0.1:6379> incrby count 10
(integer) 111
// -20
127.0.0.1:6379> decrby count 20
(integer) 91

// setnx key不存在的情况下设置value
127.0.0.1:6379> setnx count 1
(integer) 0

2)应用

对象存储,对象属性字段极少修改时使用

bash 复制代码
127.0.0.1:6379> set role:10001 '{["name"]:"volt",["sex"]:"male",["age"]:20}'
OK
127.0.0.1:6379> get role:10001
"{[\"name\"]:\"volt\",[\"sex\"]:\"male\",[\"age\"]:20}"

累加器,统计阅读量,执行次数等

bash 复制代码
127.0.0.1:6379> incr ids
(integer) 1
127.0.0.1:6379> incr ids
(integer) 2

位运算,实现签到功能

bash 复制代码
// 第一天签到
127.0.0.1:6379> setbit sign:10001:202603 1 1
(integer) 0
// 第二天签到
127.0.0.1:6379> setbit sign:10001:202603 2 1
(integer) 0
// 查询签到次数
127.0.0.1:6379> bitcount sign:10001:202603
(integer) 2
// 查询第二天是否签到
127.0.0.1:6379> getbit sign:10001:202603 2
(integer) 1

2.链表--双向链表有序队列

1)基础命令

bash 复制代码
// 从队列左侧插入多条数据
127.0.0.1:6379> lpush list volt ash meg
(integer) 3
// 打印所有数据,0为首元素下标,-1为尾元素下标
127.0.0.1:6379> lrange list 0 -1 
1) "meg"
2) "ash"
3) "volt"
// 从队列右侧插入多条数据
127.0.0.1:6379> rpush list inaros nekros
(integer) 5
// 再次打印
127.0.0.1:6379> lrange list 0 -1 
1) "meg"
2) "ash"
3) "volt"
4) "inaros"
5) "nekros"

// 从队列左侧弹出数据
127.0.0.1:6379> lpop list
"meg"
// 从队列右侧弹出数据
127.0.0.1:6379> rpop list
"nekros"
127.0.0.1:6379> lrange list 0 -1 
1) "ash"
2) "volt"
3) "inaros"

// 指定key开始移除n个数据
127.0.0.1:6379> lrem list 1 volt
(integer) 1
127.0.0.1:6379> lrange list 0 -1 
1) "ash"
2) "inaros"

// 清空队列后进入阻塞等待状态,直到(另一个线程插入)队列中有数据
127.0.0.1:6379> lrange list 0 -1 
(empty array)
127.0.0.1:6379> brpop list 0
// 另一个线程
127.0.0.1:6379> lpush list excalibur
(integer) 1
// 阻塞线程显示结果 1)队列名 2)数据内容
127.0.0.1:6379> brpop list 0
1) "list"
2) "excalibur"
(92.96s)

2)应用

栈(先进后出)

LPUSH + LPOP 或 RPUSH + RPOP

队列(先进先出)

LPUSH + RPOP 或 RPUSH + LPOP

阻塞队列

LPUSH + BRPOP 或 RPUSH + BLPOP

获取固定窗口记录,每次插入数据后都进行一次裁剪,从左侧数据(最新)开始裁剪5个,保持窗口显示最新的5条数据

bash 复制代码
127.0.0.1:6379> lpush warframe excalibur
(integer) 1
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lpush warframe volt
(integer) 2
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lpush warframe meg
(integer) 3
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lpush warframe wisp
(integer) 4
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lpush warframe ash
(integer) 5
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lpush warframe nekros
(integer) 6
127.0.0.1:6379> ltrim warframe 0 4
OK
127.0.0.1:6379> lrange warframe 0 -1
1) "nekros"
2) "ash"
3) "wisp"
4) "meg"
5) "volt"

3.hash--对象属性结构化存储

1)基础命令

bash 复制代码
// 哈希类型,设置多条属性
127.0.0.1:6379> hset volt:10001 name volt age 20 sex male height 175
// 返回结果
OK
// 获取数据
127.0.0.1:6379> hgetall volt:10001
1) "name"
2) "volt"
3) "age"
4) "20"
5) "sex"
6) "male"
7) "height"
8) "175"
// 修改数据 年龄+1
127.0.0.1:6379> HINCRBY volt:10001 age 1
// 返回结果
(integer) 21

// 获取属性个数
127.0.0.1:6379> hlen volt:10001
(integer) 4
// 获取单个属性数据
127.0.0.1:6379> hget volt:10001 age
"21"
// 删除单条属性
127.0.0.1:6379> hdel volt:10001 age
(integer) 1

2)应用

存储对象,对象属性有修改需求

通常与其他结构一起使用

4.set--无序唯一元素容器

1)基础命令

bash 复制代码
// 向指定集合中插入元素
127.0.0.1:6379> sadd team wisp nekros nidus ivara
(integer) 4
// 统计集合中元素数量
127.0.0.1:6379> scard team
(integer) 4
// 判断元素是否在集合中
127.0.0.1:6379> sismember team volt
(integer) 0

set结构中元素必须唯一

bash 复制代码
// 重复元素无法插入
127.0.0.1:6379> sadd friends:10001 volt
(integer) 0
// 新元素可以插入
127.0.0.1:6379> sadd friends:10001 inaros
(integer) 1
// 再次打印集合
127.0.0.1:6379> smembers friends:10001
1) "volt"
2) "ash"
3) "meg"
4) "inaros"

2)应用

抽奖

bash 复制代码
// 添加抽奖用户
127.0.0.1:6379> sadd prizedraw volt excalibur meg wisp ash nidus inaros nekros ivara gauss
(integer) 10
// 抽取三名幸运用户
127.0.0.1:6379> srandmember prizedraw 3
1) "volt"
2) "wisp"
3) "nidus"

共同关注

bash 复制代码
// 两名用户各自的好友
127.0.0.1:6379> sadd follow:meg wisp ash nidus nekros
(integer) 4
127.0.0.1:6379> sadd follow:volt wisp ash nidus ivara gauss excalibur
(integer) 6
// 取交集
127.0.0.1:6379> sinter follow:meg follow:volt
1) "wisp"
2) "ash"
3) "nidus"

推荐好友,meg可能认识的人

bash 复制代码
// 取差集
127.0.0.1:6379> sdiff follow:volt follow:meg
1) "ivara"
2) "excalibur"
3) "gauss"

5.zset--带分数排序的唯一集合

1)基础命令

bash 复制代码
// 插入带有score的元素,分数在元素之前
127.0.0.1:6379> zadd ranks 100 volt 110 ash 120 excalibur 90 meg 
(integer) 4
// 打印所有元素及其分数(默认从低到高)
127.0.0.1:6379> zrange ranks 0 -1 withscores
1) "meg"
2) "90"
3) "volt"
4) "100"
5) "ash"
6) "110"
7) "excalibur"
8) "120"
// 获取某个元素的score
127.0.0.1:6379> zscore ranks meg
"90"
// 为集合中元素的score增加值
127.0.0.1:6379> zincrby ranks 10 volt
"110"

2)应用

排行榜,从大到小排序

bash 复制代码
127.0.0.1:6379> zrevrange ranks 0 -1
1) "excalibur"
2) "ash"
3) "volt"
4) "meg"

延时队列,通过触发时间为事件进行排序


https://github.com/0voice

相关推荐
忙什么果2 小时前
transformer学习笔记1
笔记·学习·transformer
Yvonne爱编码2 小时前
数据库---Day3 数据类型
数据库
风舞雪凌月2 小时前
【趣谈】移动系统和桌面系统编程语言思考
java·c语言·c++·python·学习·objective-c·swift
88号技师2 小时前
2026年3月新锐一区SCI-随机社会学习优化算法Stochastic social learning-附Matlab免费代码
学习·算法·数学建模·matlab·优化算法
羑悻的小杀马特2 小时前
30 分钟零基础搭建 Home Assistant,解锁全屋智能新境界
数据库·人工智能
皙然2 小时前
深入理解 MySQL 事务:从基础到实战,一篇吃透
数据库·mysql
今儿敲了吗2 小时前
Linux学习笔记第三章——基础命令(一)
linux·笔记·学习
我科绝伦(Huanhuan Zhou)2 小时前
MySQL数据库备份管理系统新增备份任务巡检功能
运维·数据库·mysql
冰语竹2 小时前
Android学习之Activity生命周期
android·学习