【Redis】Redis 入门

借鉴枫枫知道 

一、连接 redis

1.1 命令行连接

// 完整的命令
redis-cli -h 127.0.0.1 -p 6379 -a password

// 简写
redis-cli

// 认证,进行redis之后
auth password

1.2 go 代码连接

package main

import (
    "fmt"
    "github.com/go-redis/redis"
)

var DB *redis.Client

func Connect() {
    redisDB := redis.NewClient(&redis.Options {
        Addr: "127.0.0.1:6379",
        Password: "redis",
        DB:  1,
    })

    _, err := redisDB.Ping().Result()
    if err != nil {
        panic(err)
    }
    DB = redisDB
}

二、redis 五大数据类型

注意:redis 中的数据都是在内存里面的,redis 服务重启之后,数据会被清空

2.1 string(字符串)

       字符串 String 是 redis 最简单的数据结构,可以存储字符串、整数或者浮点数。最常用的应用场景就是对象缓存。

命令总结:

set name hrx                         设置这个key

get name                               获取这个key

exists name                           判断这个key是否存在

del name                               删除这个key 

getset  name lisi                    如果不存在值,则返回nil,set是会执行的;

                                              如果存在值,获取原来的值,并设置新的值

mset n1 zhangsan n2 lisi      批量设置key

incr  n                                    自增1

decr n                                    自减1

incrby  n 10                           自增10

decrby n 10                           自减10

setex name 20 hrx                设置过期时间为20秒

ttl name                                 查看还有多久过期

expire name  20                    设置过期时间为20秒

redis-cli
127.0.0.1:6379> auth redis  # 登录
OK
127.0.0.1:6379> set name fengfeng   # 设置
OK
127.0.0.1:6379> get name  # 获取
"fengfeng"
127.0.0.1:6379> exists name  # 判断这个key是否存在
(integer) 1
127.0.0.1:6379> exists name1 
(integer) 0
127.0.0.1:6379> del name  # 删除这个key
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> GETSET name1 lisi # 如果不存在值,则返回 nil,set是会执行的
(nil)
127.0.0.1:6379> GETSET name1 lisi #  如果存在值,获取原来的值,并设置新的值
"lisi"

批量操作

127.0.0.1:6379> mset n1 zhangsan n2 lisi
OK
127.0.0.1:6379> get n1
"zhangsan"
127.0.0.1:6379> get n2
"lisi"

计数操作:

自增1,自减1

127.0.0.1:6379> get n
(nil)
127.0.0.1:6379> incr n  # 自增1
(integer) 1  # 当前这个n的值
127.0.0.1:6379> get n
"1"
127.0.0.1:6379> incr n
(integer) 2
127.0.0.1:6379> get n
"2"
127.0.0.1:6379> decr n  # 自减1
(integer) 1
127.0.0.1:6379> get n
"1"
127.0.0.1:6379> decr n
(integer) 0
127.0.0.1:6379> get n
"0"
127.0.0.1:6379> decr n
(integer) -1
127.0.0.1:6379> get n
"-1"

自增n,自减n

127.0.0.1:6379> get n
(nil)
127.0.0.1:6379>
127.0.0.1:6379> INCRBY n 10
(integer) 10
127.0.0.1:6379> INCRBY n 11
(integer) 21
127.0.0.1:6379> get n
"21"
127.0.0.1:6379> DECRBY n 5
(integer) 16
127.0.0.1:6379> get n
"16"

过期操作

setex 的单位是秒

127.0.0.1:6379> setex name 20 fengfeng
OK
127.0.0.1:6379> get name
"fengfeng"
127.0.0.1:6379> ttl name  # 查看还有多久过期
(integer) 12
127.0.0.1:6379> ttl name  # -2表示已过期
(integer) -2
127.0.0.1:6379> get name
(nil)

expire 设置一个 key 的过期时间(如果不设置过期时间,ttl 显示的结果是 -1 表示永不过期)

127.0.0.1:6379> set name fengfeng
OK
127.0.0.1:6379> ttl name  # 现在是永不过期
(integer) -1
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name  # 现在是过期了
(integer) -2

2.2 list(列表)

redis 的列表就相当于 go 里面的切片

命令总结:

rpush list zhangsan lisi wangwu xiaoming         从右边向左边推入四个元素

llen list                                                                查询列表的长度

lrange list  0   -1                                                 查看列表中的全部元素

rpop  list                                                             从右边推出一个元素出来

lpop   list                                                            从左边推出一个元素出来

lpush list zhangsan lisi wangwu xiaoming         从左边向右边推入四个元素

rpush list zhangsan lisi wangwu  xiaoming  # 从右边向左边推入四个元素
4 # 返回列表的长度
127.0.0.1:6379> llen list # 查列表的长度
4
127.0.0.1:6379> lrange list 0 -1  # 查看列表的全部元素
zhangsan
lisi
wangwu
xiaoming
127.0.0.1:6379> rpop list  # 从右边推一个元素出来
rpop list
xiaoming
127.0.0.1:6379> lrange list 0 -1
zhangsan
lisi
wangwu
127.0.0.1:6379> lpop list  # 从左边推一个元素出来
zhangsan
127.0.0.1:6379> lrange list 0 -1
lisi
wangwu

2.3 set(集合)

       集合中的元素没有先后顺序,hashmap就是基于hashmap来实现的,hashset其实就是一个集合,里面的元素是无序的,他里面的元素不能重复。  

命令总结:

sadd set a b c d   添加元素

scard  set   获取集合的长度

sismember  set  a   判断某一个元素是不是在集合里面

smembers set  获取集合中的数据是无序的

srem  set  a  删除集合中的某一个元素,可以传入多个

sdiff  set1  set2   差集

sinter  set1  set2   交集

sunion  set1  set2   并集

spop  order  随机移除一个元素

127.0.0.1:6379> sadd set a b c d # 添加元素
4
127.0.0.1:6379> sadd set a b c e  # 实际只有一个元素添加进去了
1
127.0.0.1:6379> scard set  # 获取集合的长度
5
127.0.0.1:6379> sismember set a # 判断某个元素是不是在集合里面
1
127.0.0.1:6379> sismember set f
0
127.0.0.1:6379> smembers set # 获取集合中的数据 无序的
e
d
b
a
c
127.0.0.1:6379> srem set a # 删除集合中的某个元素 可传多个
1

 

交集,并集和差集:

sdiff  差集

sinter 交集

sunion 并集 

127.0.0.1:6379> sadd set1 1 2 3
3
127.0.0.1:6379> sadd set2 2 3 4
3
127.0.0.1:6379> sdiff set1 set2   # 差集
1
127.0.0.1:6379> sdiff set2 set1
4
127.0.0.1:6379> sinter set1 set2 # 交集
2
3
127.0.0.1:6379> sunion set1 set2  # 并集
1
2
3
4

       随机抽奖,使用 spop 命令用于移除集合中的指定 key 的一个或者多个随机元素,移除后会返回移除的元素。

127.0.0.1:6379> sadd order 1 2 3 4 5 6 7 8
8
127.0.0.1:6379> spop order # 随机移除一个
5 # 随机的
127.0.0.1:6379> spop order
7
127.0.0.1:6379> spop order 3 # 随机移除3个  3.2版本才有效 redis-server -v 查看版本 或者
7

2.4 hash(哈希)

相当于 go 里面的 map,python 中的字典

注意:设置过期只能给 hash 的 key 设置过期,里面的键值对是不能单独再设置过期的时间 

命令总结:

hset dict name fengfeng                  设置一个hash key,并且给hash里面设置一组filed value

hget dict name                                 获取hash里面对应的filed的值

hgetall  dict                                      数据量大的时候,谨慎使用!!!

                                                        获取在哈希表中指定key的所有字段和值

hkeys dict                                        获取在哈希表中指定key的所有filed

hmset info name fengfeng age 23  批量设置

hexists  info name                           判断某一个 key 是否存在

hdel info name                                 删除hash中的一个filed

hlen info                                           返回hash中的filed的个数

127.0.0.1:6379> hset dict name fengfeng  # 设置一个hash key,并且给hash里面设置一组filed value
0
127.0.0.1:6379> hget dict name  # 获取hash里面对应filed的值
fengfeng
127.0.0.1:6379> hgetall dict # 数据量大时,谨慎使用!获取在哈希表中指定 key 的所有字段和值
name
fengfeng
127.0.0.1:6379> hkeys dict # 获取在哈希表中指定 key 的所有filed
name
127.0.0.1:6379> hmset info name fengfeng age 23  # 批量设置
OK
127.0.0.1:6379> hkeys info
name
age
127.0.0.1:6379> HEXISTS info name  # 判断某个key是否存在
1
127.0.0.1:6379> HEXISTS info name1
0
127.0.0.1:6379> HDEL info name  # 删除hash中的一个filed
1
127.0.0.1:6379> hkeys info
age
127.0.0.1:6379> hlen info  # 返回hash中filed的个数
1

2.5 zset(有序集合)

       有序集合,sorted set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序的排列,也是不能重复的。

127.0.0.1:6379> zadd class 88 fengfeng 46 zhangsan 76 wangwu 36 lisi  # 向有序集合添加一个或多个成员
(integer) 4
127.0.0.1:6379> zrange class 0 -1  # 通过索引,按照分数从低到高返回
1) "lisi"
2) "zhangsan"
3) "wangwu"
4) "fengfeng"
127.0.0.1:6379> zrevrange class 0 -1  # 通过索引,按照分数从高到低返回
1) "fengfeng"
2) "wangwu"
3) "zhangsan"
4) "lisi"
127.0.0.1:6379> zcard class  # 获取有序集合的成员数
(integer) 4
127.0.0.1:6379> ZSCORE class zhangsan # 查看某个成员的分数
"46"
127.0.0.1:6379> ZRANK class wangwu # 查看成员的排名 从小到大排序
(integer) 2
127.0.0.1:6379> ZREVRANK class wangwu # 查看成员的排名 从大到小排序
(integer) 1
127.0.0.1:6379> zcount class 40 70 # 计算在有序集合中指定区间分数的成员数
(integer) 1
127.0.0.1:6379> zrangebyscore class 40 70  # 通过分数返回有序集合指定区间内的成员
1) "zhangsan"
127.0.0.1:6379> zrevrangebyscore class 100 0 # 返回有序集中指定分数区间内的成员,分数从高到低排序
1) "fengfeng"
2) "wangwu"
3) "zhangsan"
4) "lisi"
127.0.0.1:6379> zrange class 0 -1 withscores  # 把成员和分数一起显示出来
1) "lisi"
2) "36"
3) "zhangsan"
4) "46"
5) "wangwu"
6) "76"
7) "fengfeng"
8) "88"
127.0.0.1:6379> zrem class fengfeng  # 移除一个成员
(integer) 1
127.0.0.1:6379> zrange class 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> ZREMRANGEBYRANK class 0 0  # 移除有序集合中给定的排名区间的所有成员(第一名是0)(低到高排序) 现在是把lisi移除了 
(integer) 1
127.0.0.1:6379> zrange class 0 -1
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379> ZREMRANGEBYSCORE class 40 50 # 移除有序集合中给定的分数区间的所有成员
(integer) 1
127.0.0.1:6379> zrange class 0 -1
1) "wangwu"
127.0.0.1:6379> ZSCORE class wangwu
"76"
127.0.0.1:6379> ZINCRBY class 2 wangwu  # 给王五+2
"78"
127.0.0.1:6379> ZINCRBY class -2 wangwu # 给王五-2
"76"
127.0.0.1:6379> ZSCORE class wangwu
"76"

三、通过 go 操作五大数据类型

四、redis 常用的命令

五、事务

六、锁

七、持久化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979175.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HVAC 设计:使用 Ansys Discovery 探索更好的设计

通过 Ansys Discovery 及其 2025 年新功能利用 CFD,通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战: 压力损失:设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…

【Redis】Redis初阶

🔥个人主页: 中草药 一、认识Redis Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储数据库,支持持久化、网络化访问,并提供多种数据结构操作,用作数据缓存。它由Salvatore …

帧中继+静态路由实验(大规模网络路由器技术)

一、帧中继实验 (1)实验拓扑图如下图所示: 帧中继交换机1接口两侧的DLCI值: 数据链路连接标识符(DLCI,Data Link Connection Identifier),DLCI值用于标识 永久虚电路 (PVC&#xf…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置:Microsoft Azure 注册使用免费服务: 需要信用卡,本人没有,所以没有完成注册

海洋cmsv9报错注入,order by 和limit注入

海洋cmsv9 1,我们拿到海洋cmsv9源码分析发现注入点,$rlist 2,seacms开源,可以知道seacmsv9系统数据库(mysql)为seacms,存放管理员账号的表为 sea_admin,表中存放管理员姓名的字段为…

Linux系统下基于mplayer媒体播放器

1、项目背景 随着多媒体技术的发展,各种音视频格式的流行,用户对媒体播放器的功能和性能要求 日益增加。MPlayer是一个强大的开源媒体播放器,支持多种音视频格式。本项目旨在 基于MPlayer构建一个轻量级的Linux媒体播放器,提供简洁…

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m,分别表示数组的…

2025 软件供应链安全情报预警平台建设与实践

何为数字安全供应链情报? 所谓的数字供应链开源安全情报主要针对目标是开源数字应用资产。包括开源组件,中间件和操作系统。开源安全情报类型可以分为三大类: 1 第一类是传统的安全漏洞风险情报,开源漏洞情报数据获取主要有2种渠…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判(入侵检测)​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

DeepSeek赋能智慧社区:提升社区治理,优化资源配置,带来全新变革

在数字化浪潮的推动下,智慧社区正逐渐成为城市发展的重要方向。作为一款先进的人工智能大模型,DeepSeek凭借其强大的多模态数据分析和智能决策能力,正在为智慧社区的建设注入新的活力。 标准规范及顶层设计指南、供应商整体解决方案合集、供应…

代理服务器与内网穿透/打洞

内网穿透 简单来说内网穿透就是让一个在私人IP的设备,能在公网上被别的主机访问到资源。 中间经过服务器将获取的数据转发给主机。 内网打洞 内网打洞,也叫 P2P 穿透或 NAT 穿越,是一种用于实现位于不同内网中的设备之间直接建立连接的技…

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链,继续使用基于 langgraph 链 ,对结构化数据库 SQlite 进行查询的方法。该系统建立以后,我们不需要掌握专业的 SQL 技能,可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…

Geek卸载软件安装使用教程

文章目录 一、Geek下载二、使用步骤 一、Geek下载 Geek Uninstallers最新版是一款高效、快速、小巧、免费的软件卸载与清理工具,旨在帮助用户删除系统上安装的程序。不同于其他的卸载程序,Geek Uninstaller执行深入扫描进程,并清除软件卸载后…

BIO、NIO、AIO解析

一、基础概念 1、IO的含义 IO,Input/Output,即输入/输出。从计算机结构来看,IO描述了计算机系统和外部设备之间通讯的过程。从应用程序角度来看,一个进程的地址空间划分为 用户空间(User space) 和 内核空…

抖音生活服务加强探店内容治理,2024年达人违规率下降30%

发布 | 大力财经 2月27日,抖音生活服务发布《2024抖音生活服务消费者权益保护年度报告》(以下简称“报告”)。报告显示,过去一年,抖音生活服务针对消费者反感的虚假、夸张探店内容,开展了专项治理。通过一…

Apollo Cyber 学习笔记

目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…

企业如何挖掘数据资产价值?

本期推荐:挖掘数据资产价值,赋能企业发展,共28页ppt。 关注WeChat Subscription Account【智慧城市指北】,回复关键字“20250228数据资产”,获取获得本文电子版材料的方式(非无偿)~ 篇幅限制,…

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI(1990s-) 作为Java生态中最古老的Excel处理库,提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现,包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…

千峰React:Hooks(下)

useLayoutEffect useLayoutEffect在useEffect之前触发 这样会闪屏,因为是异步的,两次都渲染了 import {useEffect,useState } from react;function App() {const [msg,setMsg] useState(hello App)useEffect(() > {setMsg(hello useEffect)});retu…