Redis的五大基本类型

本文介绍了Redis的五大基本数据类型,包括String、List、Set、Hash和Zset。详细讲解了每种类型的特性与操作命令,如String的自增自减、List的左右操作、Set的无序不重复、Hash的对象存储以及Zset的排序功能。Redis作为内存中的数据结构存储,广泛用于数据库、缓存和消息代理,支持多种数据结构和高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本知识

Redis默认有16个数据库,查看redis.windows.conf文件可以找到
在这里插入图片描述
默认的使用的是第0个

可以使用select切换数据库

127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379>

数据库的大小和查询当前数据库的所有key值

127.0.0.1:6379> set name object  >> 给name赋值
OK
127.0.0.1:6379> get name 	
"object"
127.0.0.1:6379> dbsize          >>查询数据库的大小
(integer) 1
127.0.0.1:6379> set name1 object
OK
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> keys *		>>或得当前数据库的所有key1) "name1"
2) "name"

清空当前数据库和清空所有数据库

127.0.0.1:6379> flushdb		>>清空当前数据库
OK
127.0.0.1:6379> flushall	>>清空所有数据库
OK
127.0.0.1:6379>   

Redis-Key的常用命令

127.0.0.1:6379> keys *		>>获取全部的key(empty list or set)
127.0.0.1:6379> set name object		>>给name赋值
OK
127.0.0.1:6379> get name			>>获取name对应的value"object"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> exists name			>>判断可以是否存在 1存在 0不存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1			>>删除一个key(integer) 1
127.0.0.1:6379> clear 				>>清屏
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name object
OK
127.0.0.1:6379> expire name 10	>>设置可以的有效期 返回1成功
(integer) 1
127.0.0.1:6379> ttl name		>>查询key值的有效期
(integer) 6
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name		>>有效期已经过去,key消失
(nil)
127.0.0.1:6379> set name object
OK
127.0.0.1:6379> type name		>>查询出key的类型
string
127.0.0.1:6379> type age	
string
127.0.0.1:6379> 

Redis 是单线程的!

2.五大基本类型

官方文档
在这里插入图片描述
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。

String(字符串)

127.0.0.1:6379> set name object		>>key赋值
OK
127.0.0.1:6379> get name			>>key"object"
127.0.0.1:6379> keys *				>>取所有key1) "name"
127.0.0.1:6379> exists name		>>判断key是否存在(1) 如果不存在,则创建
(integer) 1
127.0.0.1:6379> append name "Hello"	>>追加字符串
(integer) 11
127.0.0.1:6379> get name
"objectHello"
127.0.0.1:6379> strlen name			>>获取字符串的长度
(integer) 11

设置自增 自减

127.0.0.1:6379> set hits 0	>>初始值为0
OK
127.0.0.1:6379> get hits
"0"
127.0.0.1:6379> incr hits	>>累加1
(integer) 1
127.0.0.1:6379> incr hits
(integer) 2
127.0.0.1:6379> get hits
"2"
127.0.0.1:6379> decr hits  >>累减1
(integer) 1
127.0.0.1:6379> decr hits
(integer) 0
127.0.0.1:6379> get hits
"0"
127.0.0.1:6379> incrby hits 10		>>自定义增长
(integer) 10
127.0.0.1:6379> get hits
"10"
127.0.0.1:6379> decrby hits 5     >>自定义减
(integer) 5
127.0.0.1:6379>  

字符串范围 range

127.0.0.1:6379> set name helloObject
OK
127.0.0.1:6379> getrange name 0 4		>>获取字符串[0,4]区间的
"hello"
127.0.0.1:6379> getrange name 0 -1		>>获取全部字符串和getkey一样的
"helloObject"
127.0.0.1:6379>  
>>>>替换
>
127.0.0.1:6379> set name abcdefg
OK
127.0.0.1:6379> get name
"abcdefg"
127.0.0.1:6379> setrange name 0 xxx	>>替换指定位置开始的字符串!
(integer) 7
127.0.0.1:6379> get name
"xxxdefg"
setex (set with expire) # 设置过期时间 
setnx (set if not exist) # 不存在在设置 (在分布式锁中会常常使用!)
127.0.0.1:6379> setex name 30 "Hello"	>>设置key的值为hello 30s过期
OK
127.0.0.1:6379> ttl name	
(integer) 25
127.0.0.1:6379> setnx name1 "redis"		>>如果不存在name1 创建name1
(integer) 1
127.0.0.1:6379> keys *
1) "name1"
2) "name"
127.0.0.1:6379> keys *
1) "name1"
127.0.0.1:6379> set name "redis"
OK
127.0.0.1:6379> get name
"redis"
127.0.0.1:6379> setnx name "mongoDb" 如果name 存在,创建失败!
(integer) 0
127.0.0.1:6379> get name1
"redis"

同时设置多个值

127.0.0.1:6379> mset a 1 b 2 c 3 d 4 e 5 >>同时设置多个值
OK
127.0.0.1:6379> mget a b c d e			>>同时获取多个值
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> msetnx e 6 x 22		>>msetnx 是一个原子性的操作,要么一起成功,要么一起 失败
(integer) 0
127.0.0.1:6379> get e
"5"
127.0.0.1:6379> get x
(nil)

存储对象

127.0.0.1:6379> set user:1 {name:object,age:16}>>设置一个user:1 对象 值为 json字符来保存一个对象!
OK
127.0.0.1:6379> get user:1
"{name:object,age:16}"

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379>  

先get在set

127.0.0.1:6379> getset db redis		>>如果key不存在返回nil并创建key
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongoDb	>>如果key不存在返回当前key,在创建新的key	
"redis"
127.0.0.1:6379> get db
"mongoDb"
127.0.0.1:6379>   

List(列表)

在这里插入图片描述
所有的list命令都是用l开头的,Redis不区分大小命令

左进右进

127.0.0.1:6379> lpush list one		>>将一个值或者多个值,插入到列表头部 (左)
(integer) 1
127.0.0.1:6379>  lpush list two
(integer) 2
127.0.0.1:6379>  lpush list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 >>获取list中值!
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 >>通过区间获取list中值!
1) "three"
2) "two"
127.0.0.1:6379>  Rpush list right  >> 将一个值或者多个值,插入到列表位部 (右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"

左移右移

127.0.0.1:6379> lpop list		>>移除list的第一个元素
"three"
127.0.0.1:6379> rpop list	>>移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

通过index获取list中的某一个值

127.0.0.1:6379> lindex list 0	>>获取下标为0的元素
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379

获取list的长度

127.0.0.1:6379> llen list	>>获取list集合的长度
(integer) 2
127.0.0.1:6379> 

移除指定的值

127.0.0.1:6379> lpush list three
(integer)3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpush list three
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three	>>移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>  

获取list的长度

127.0.0.1:6379> rpush list 1
(integer) 1
127.0.0.1:6379> rpush list 2
(integer) 2
127.0.0.1:6379> rpush list 3
(integer) 3
127.0.0.1:6379> rpush list 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> ltrim list 0 1	>>通过下标截取指定的位置
OK
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
127.0.0.1:6379>

移除列表的最后一个元素,将他移动到新的列表中

127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
127.0.0.1:6379> rpoplpush list mylist 移除list的最后一个元素,将移除元素移动到mylist列表里面
"2"
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
127.0.0.1:6379> lrange list 0 -1
1) "1"
127.0.0.1:6379>

将列表中指定下标的值替换为另外一个值,更新操作

127.0.0.1:6379> exists list >>判断这个列表是否存在 0
(integer) 0
127.0.0.1:6379> lset list 0 item >>如果不存在 我们更新就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 two >如果存在 更新当前下标
OK
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379>

将某个具体的value插入到列把你中某个元素的前面或者后面!

127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
127.0.0.1:6379> linsert list before two three	>>把three插入到two之前
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "three"
3) "two"
127.0.0.1:6379> linsert list after two aaaa >>把aaa插入到two之后
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "three"
3) "two"
4) "aaaa"
127.0.0.1:6379>

总结
如果key 不存在,创建新的链表
如果key存在,新增

Set(集合)

set中的值是不能重读的!

set添加和查询

127.0.0.1:6379> sadd set a	>>set集合添加元素
(integer) 1
127.0.0.1:6379> sadd set b
(integer) 1
127.0.0.1:6379> sadd set c
(integer) 1
127.0.0.1:6379> SMEMBERS set >>查询set集合的元素
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> SISMEMBER set a >>判断某个元素是否在集合中 10不在
(integer) 1
127.0.0.1:6379> SISMEMBER set aa
(integer) 0

获取set集合中的内容元素个数!

127.0.0.1:6379> scard set
(integer) 3
127.0.0.1:6379> 

移除set集合中的指定元素

127.0.0.1:6379>  SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> srem set a
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "c"

无序不重复集合。抽随机!

127.0.0.1:6379> smembers set
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> SRANDMEMBER set		>>随机抽取集合中的元素
"b"
127.0.0.1:6379> SRANDMEMBER set
"a"
127.0.0.1:6379> SRANDMEMBER set
"c"
127.0.0.1:6379> SRANDMEMBER set
"a"
127.0.0.1:6379> SRANDMEMBER set
"c"
127.0.0.1:6379> SRANDMEMBER set 2 >> 随机抽选出指定个数的元素
1) "b"
2) "c"
127.0.0.1:6379> SRANDMEMBER set 2
1) "b"
2) "a"

删除定的key,随机删除key!

127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> spop set
"a"
127.0.0.1:6379> spop set
"c"
127.0.0.1:6379> SMEMBERS set
1) "b"
127.0.0.1:6379>   

将一个指定的值,移动到另外一个set集合!

127.0.0.1:6379> sadd set a
(integer) 1
127.0.0.1:6379> sadd set b
(integer) 1
127.0.0.1:6379> sadd set c
(integer) 1
127.0.0.1:6379> sadd myset d
(integer) 1
127.0.0.1:6379> smove set myset a  >>set中的指定值移动到myset里面
(integer) 1
127.0.0.1:6379> smembers set
1) "b"
2) "c"
127.0.0.1:6379>  smembers myset
1) "a"
2) "d"
127.0.0.1:6379> 

集合类
微博,B站,共同关注!(交集)
数字集合类:

  • 差集
  • 交集
  • 并集
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> SMEMBERS myset
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> sdiff set myset >>差集集
1) "a"
2) "b"
127.0.0.1:6379> sinter set myset	>>交集
1) "c"
127.0.0.1:6379> sunion set myset   >>并集
1) "e"
2) "c"
3) "b"
4) "a"
5) "d"

**
Map集合,key-map! 时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的key-vlaue!**

Hash(哈希)

添加 获取 获取全部 删除
set myhash(key) field kuangshen(value)

127.0.0.1:6379> hset user name object >>set一个具体 key-vlaue
(integer) 1
127.0.0.1:6379>  hget user name >>获取一个字段值
"object"
127.0.0.1:6379> hmset user age 16 height 180 >>设置多个字段
OK
127.0.0.1:6379> hmget user name age height >>取得多个字段
1) "object"
2) "16"
3) "180"
127.0.0.1:6379> hgetall user >>获取全部数据
1) "name"
2) "object"
3) "age"
4) "16"
5) "height"
6) "180"
127.0.0.1:6379> hdel user height   >>删除hash指定key字段!对应的value值也就消失了!
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "object"
3) "age"
4) "16"

获取hash表的字段数量!

127.0.0.1:6379> hmset user name object agae 18 height 180
OK
127.0.0.1:6379> hgetall user
1) "name"
2) "object"
3) "agae"
4) "18"
5) "height"
6) "180"
127.0.0.1:6379> hlen user		>>获取hash表的字段数量!
(integer) 3
127.0.0.1:6379>

判断hash中指定字段是否存在!

127.0.0.1:6379> hexists user name	//1存在 0不存在
(integer) 1
127.0.0.1:6379> hexists user a
(integer) 0
127.0.0.1:6379>                                                                                                                             

只获得所有field 只获得所有value

127.0.0.1:6379> hkeys user >>只获得所有field
1) "name"
2) "agae"
3) "height"
127.0.0.1:6379> hvals user >>只获得所有value
1) "object"
2) "18"
3) "180"
127.0.0.1:6379> 

指定增量!

127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hincrby user age 1 	>>指定增量!
(integer) 19
127.0.0.1:6379> hincrby user age -1 >>指定建量
(integer) 18
127.0.0.1:6379> hsetnx user name object >>如果不存在则可以设置
(integer) 1
127.0.0.1:6379> hsetnx user name object >>如果存在则不可以设置
(integer) 0

hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的
存储,String更加适合字符串存储!

Zset(有序集合)

添加一个和多个值

127.0.0.1:6379> zadd zset 1 one >>添加一个
(integer) 1
127.0.0.1:6379> zadd zset 2 two 3 three  >>添加多个
(integer) 2
127.0.0.1:6379> zrange zset 0 -1  >>查看值
1) "one"
2) "two"
3) "three"
127.0.0.1:6379>   

排序如何实现

127.0.0.1:6379> zadd zset 5 diwuming 500 diwubaiming  300 disanbaiming 
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf >>显示全部的用户 从小到大!
1) "diwuming"
2) "disanbaiming"
3) "diwubaiming"
127.0.0.1:6379> ZREVRANGE zset 0 -1 >>显示全部的用户 从大到小!
1) "diwubaiming"
2) "disanbaiming"
3) "diwuming"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf withscores  >>显示全部的用户并出来名次
1) "diwuming"
2) "5"
3) "disanbaiming"
4) "300"
5) "diwubaiming"
6) "500"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf 300 显示名字小于300的用户升 序排序
1) "diwuming"
2) "disanbaiming"

移除元素+获取元素及个数

127.0.0.1:6379> zrange zset 0 -1
1) "diwuming"
2) "disanbaiming"
3) "diwubaiming"
127.0.0.1:6379> zrem zset diwuming		>>移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "disanbaiming"
2) "diwubaiming"
127.0.0.1:6379> zcard zset	>>获取有序集合中的个数
(integer) 2
127.0.0.1:6379> zadd zset 1 hello 2 world 3 object
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "hello"
2) "world"
3) "object"
127.0.0.1:6379> zcount zset 1 3	>>获取指定区间的成员数量!
(integer) 3
127.0.0.1:6379> zcount zset 1 2
(integer) 2
127.0.0.1:6379>   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值