首页 > 数据库 >Redis入门-五大基本数据类型

Redis入门-五大基本数据类型

时间:2024-09-28 13:49:15浏览次数:3  
标签:127.0 入门 0.1 数据类型 myset Redis 6379 list integer

启动我的redis(我的redis是在www下面的server下面的redis下面的src里面去执行下面这串指令,如果你的src在其他地方可以换)

./redis-server &
cd 到src下面

对redis进行压力测试宝塔用不了(因为没有这个对应的文件)

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

常用命令

select n:n这边是选择第几个数据库
dbsize :查询数据库大小
get name 或者set name 可以设置字段
APPEND key1 "hello"可以在某个key中补充字段 (如果不存在就相当于set key)
keys *:查看数据库所有的key
flushdb:清空当前数据库
flushall:清楚所有的数据库

redis 端口号6379

redis是单线程的 why?redis基于内存操作的,cpu不是性能瓶颈,而是机器的内存和网络带宽

redis不区分大小写命令

redis为什么单线程还快?

redis是将所有的的数据放在内存中,所有使用单线程效率最高,多线程会产生上下文切换,反而会耗时。

redis可以作数据库、缓存和消息中间件MQ

它支持多种数据类型 string hash list set sorted set

Rediskey

有一些操作

move(移除当前key) exists(判断是否存在) set xxx这些
expire xxx xx:第一个是字段名,第二个是到期时间
ttl xxx:可以查还剩多少时间 
type xxx(字段):可以查出字段的类型  

String

STRLEN key1:查看多长
incr views:可以让views自增1
decr views:可以让views自减1
incrby/decrby views 10:设置步长
GETRANGE key1 1 4:取字符串范围 【1,4】
SETRANGE key2 1 sunzhijun:替换从哪一位开始的字符串
setex:(set with expire):设置过期时间
setnx:(set if not exist):不存在再设置(在分布式锁会常常使用)(存在会创建失败)
mset k1 v1 k2 v2 k3 v3 :批量设置值
mget:批量拿
#对象 
set user:1 {name:sunzhijun,age:22}
mget user:1
getset db redis:先获取再set,返回获取到的值(用于更新操作)
使用场景:计数器,统计数量,缓存存储,粉丝数

List

(列表) 可以完成栈和队列

所有list命令都是l开头的

LPUSH :存数据 LPUSH list one,将一个或多个值插入到列表的头部

RPUSH :存数据 RPUSH list one,将一个或多个值插入到列表的尾部

LRANGE:看数据 LRANGE 0 -1

移除列表第一个元素是LPOP RPOP

lindex list 0:获取第一个下标为0的值 

llen list:查列表长度 

LREM list 1 one:移除一个one

ltrim:从左边开始修剪 ltrim   ltrim list 2 3///
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> ltrim list 2 3
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> 
rpoplpush:(组合命令  )
127.0.0.1:6379> RPUSH list hello1
(integer) 1
127.0.0.1:6379> RPUSH list hello2
(integer) 2
127.0.0.1:6379> RPUSH list hello3
(integer) 3
127.0.0.1:6379> RPUSH list hello4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
4) "hello4"
127.0.0.1:6379> RPOPLPUSH list mylist
"hello4"
127.0.0.1:6379> LRANGE list 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello4"


LSET mylist 0 woaini:替换值 (做了更新操作)

插入值:
127.0.0.1:6379> LRANGE mylist 0 -1
1) "woaini"
127.0.0.1:6379> linsert mylist before "woaini" hanyuzhu
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hanyuzhu"
2) "woaini"
总结:
实际上,它是一个链表,before 或者after left right都可插入 
两边改动效率最高,中间改动比较低

Set:无序不重复集合

(在所有操作前面加s)

sadd set “hello”

127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "hello1"
(integer) 1
127.0.0.1:6379> sadd myset "hello2"
(integer) 1
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> SMEMBERS myset(查询myset的所有值)
1) "hello"
2) "hello1"
3) "hello2"

是否包含:

127.0.0.1:6379> SISMEMBER myset hello1
(integer) 1
127.0.0.1:6379> SISMEMBER myset hoo
(integer) 0

获取元素中元素个数

127.0.0.1:6379> scard myset
(integer) 3

移除元素

127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2

随机移除一个元素

127.0.0.1:6379> spop myset
"hello2"
smove xxx xxx "":将一个特定的值,移动到另一个set集合中

求交并补三种集合

127.0.0.1:6379> sadd key1 one
(integer) 1
127.0.0.1:6379> sadd key1 two
(integer) 1
127.0.0.1:6379> sadd key1 three
(integer) 1
127.0.0.1:6379> sadd key2  three
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 差集
1) "one"
2) "two"
127.0.0.1:6379> SINTER key1 key2  交集 共同好友就是这样实现的   
1) "three"
127.0.0.1:6379> SUNION key1 key2  并集
1) "one"
2) "two"
3) "three"

Hash(哈希)

Map集合,key-<key,value>,这里寸的是键值对,是map集合

本质和string没有太大区别

127.0.0.1:6379> HSET myhash field1 sunzhijun set一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash field1
"sunzhijun"
127.0.0.1:6379> hmset myhash field1 sun field2 zhi field jun
OK
127.0.0.1:6379> HMGET myhash field1 field2
1) "sun"
2) "zhi"

删除字段

127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hget myhash field1
(nil) ------------------------删除成功

获取有多少个键值对(字段数量)

127.0.0.1:6379> hlen myhash 
(integer) 2

判断一个hash中这个键值对是否存在

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

127.0.0.1:6379> HEXISTS myhash field1
(integer) 0-----------------不存在

直接拿所有的key或者value

127.0.0.1:6379>  hkeys myhash
1) "field2"
2) "field"
127.0.0.1:6379> hvals myhash
1) "zhi"
2) "jun"

hash变更值

127.0.0.1:6379> hset user:1 name sunzhijun
(integer) 1
127.0.0.1:6379> hset user:2 name hanyuzhu
(integer) 1
127.0.0.1:6379> hget user:1 name
"sunzhijun"
之前在string类型的时候也可以设置set user:{name:sunzhijun,age:3}这种形式
hash比较适合用户信息这类的保存,用于经常变动的信息(适合存储对象)

ZSet(有序集合)

本质是在set的基础上增加了一个值

zset k1 score1 v1(v1相当于使用来排序的)

127.0.0.1:6379> zadd myset 1 one 
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
#########################################################

如果想实现排序呢
127.0.0.1:6379> zadd xinshui 2500 xiaohong 5000 zhangsan 500 sunzhijun
(integer) 3
127.0.0.1:6379> ZRANGE xinshui 0 -1
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf +inf
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf +inf withscores
1) "sunzhijun"
2) "500"
3) "xiaohong"
4) "2500"
5) "zhangsan"
6) "5000"
只能最小值到最大值哈,不然是错的
薪水小于2500的升序排列
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf 2500 withscores
1) "sunzhijun"
2) "500"
3) "xiaohong"
4) "2500"
127.0.0.1:6379> ZREVRANGE xinshui 0 -1(这是从大到小排序)
1) "zhangsan"
2) "sunzhijun"

移除有序集合中的指定元素

127.0.0.1:6379> zrange xinshui 0 -1
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> zrem xinshui xiaohong
(integer) 1
127.0.0.1:6379> zcard xinshui(获取有序集合中的个数)
(integer) 2

获取指定区间的值

127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world
(integer) 1
127.0.0.1:6379> zadd myset 3 sunzhijun
(integer) 1
127.0.0.1:6379> ZCOUNT myset 1 2
(integer) 2

其余指令可以在官网查

可以对一些重要消息带权重执行

比如:排行榜(取top n)

标签:127.0,入门,0.1,数据类型,myset,Redis,6379,list,integer
From: https://blog.csdn.net/weixin_46667127/article/details/142614341

相关文章

  • AI绘画SD和MJ零基础入门到精通教程,这些技巧让你的画作更惊艳!这些指令快速激发你的创作
    ‍......
  • 【网络安全安全管理入门必知必会】什么是等级保护?零基础入门到精通,收藏这篇就够了
    前言这是西西给粉丝盆友们整理的网络安全安全管理阶段第1篇。喜欢的朋友们,记得点赞支持和收藏一下,关注我,学习黑客技术。1.什么是等级保护?1.1.概念信息安全等级保护是指根据我国《信息安全等级保护管理办法》的规定,对各类信息系统按照其重要程度和保密需求进行分级,并......
  • 程序员如何搞副业,零基础入门到精通,收藏这一篇就够了
    随着互联网的发展,程序员也越来越深入到各个行业当中。有了技术的加持,更加激发探索新的领域兴趣。当掌握一定的技术,也许很多程序员也开始考虑创业,将毕生所学的技术能力创造出新的价值。01创业的几点思路1、利用互联网创业。互联网行业投资风险小,因为可以有效的把握市场走......
  • 书生大模型实战(从入门到进阶)L2-茴香豆:企业级知识库问答工具
    目录茴香豆介绍 茴香豆本地标准版搭建 环境搭建配置服务器:搭建茴香豆虚拟环境:安装茴香豆下载茴香豆 安装茴香豆所需依赖下载模型文件更改配置文件知识库创建测试知识助手命令行运行GradioUI界面测试本文是对书生大模型L2-茴香豆:企业级知识库问答工具部分......
  • 安全运营工程师是做什么的?零基础入门安全运营(非常详细)看一篇就够了!
    前言什么是安全运营工程师安全运营工程师是网络安全大方向下网络安全运行与维护岗的一个细分岗位。1、安全运营工程师需要具备哪些综合能力?对安全行业发展趋势及生态有良好的认知;具备优秀的逻辑分析能力、表达能力、文字撰写的能力;拥有良好的跨团队协调和推进项目的......
  • Redis 和 CDN 的应用场景区别及 Redis 大 Key 解析
    在现代互联网架构中,Redis和CDN都是非常重要的技术工具,它们在不同的应用场景中发挥着关键作用。 一、Redis的应用场景 (一)缓存场景 1. 加速数据访问:在Web应用中,Redis常被用来缓存频繁访问的数据,如数据库查询结果、页面片段等。以电商网站为例,热门商品的信息被缓......
  • 在 Go 语言中使用 Redis 实现事务并保证 ACID 属性及理解隔离级别
    目录一、Redis事务的基本概念二、在Go语言中使用Redis实现事务的步骤(一)安装Redis客户端库(二)创建Redis客户端(三)开启事务(四)执行事务命令(五)提交事务三、保证事务的ACID属性(一)原子性(Atomicity)(二)一致性(Consistency)(三)隔离性(Isolation)(四)持久性(Durability)四、......
  • ClioSoft SOS深度解析:从基础入门到高级配置全攻略
    这个目录为用户提供了全面的ClioSoftSOS学习指南,涵盖了从基础概念到高级配置的所有方面。以下是每个部分的简要总结,每个目录内容将持续更新,欢迎大家收藏关注专栏《ClioSoftSOS深度解析:从基础入门到高级配置全攻略》,专栏地址:https://blog.csdn.net/qq_24766857/category_12......
  • 动手动脑——数据类型的转换
    1.整数大小:整数类型的位数越大,能够表示的数值范围也越大。byte和short类型适合用于节省空间的场合,而int是最常见的整数类型,因为它提供了足够的范围和较好的性能。long类型则用于需要更大数值范围的场合。2.字符表示:char类型专门用于表示Unicode字符,其大小固定为16位,可以表示任何......
  • Python 从入门到实战30(高级文件的操作)
            我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。        上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文件操作的相关知识。    ......