redis基本知识,及八种数据类型相关操作

本文详细介绍了Redis的基础知识及各种数据类型的使用方法,包括String、List、Set、Hash等,通过实例展示了如何进行数据的操作与管理。

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

一、基础知识

1、redis默认有16个数据库。(默认使用的第0个数据库),单线程。个面具内存和带宽决定。

2、常用命令

1)数据库操作

select index
//切换数据库,index是脚标
dbsize
//查看数据库的大小
keys *
//查看所有的key
flushdb
//清空当前数据库
flushall
//清空所有数据库

2)Redis-key相关操作

exists name 
//name是set 的key,判断是否存在

expire name 10
//设置过期时间

ttl name
//查看当前key的剩余时间

move name 1
//移除当前的key

type name 
//查看当前key的类型

set name Tan
//设置name的值为Tan

append name "hello"
//在name后面追加hello

二、基本类型

1、String类型

#string 的创建,获取值,追加,查询是否存在
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys * #查询所有的key
(empty array)
127.0.0.1:6379[2]> set key1 v1 #set一个键值对
OK
127.0.0.1:6379[2]> keys *
1) "key1"
127.0.0.1:6379[2]> exists key1 #查询这个key是否存在
(integer) 1
127.0.0.1:6379[2]> append key1 ",hello" #在这个Key对应的值上面追加
(integer) 8
127.0.0.1:6379[2]> strlen key1 #返回这个key对应的长度
(integer) 8
127.0.0.1:6379[2]> get key1
"v1,hello"
127.0.0.1:6379[2]> append name "zhangsan" #追加不存在的,会新建一个k-v
(integer) 8
127.0.0.1:6379[2]> keys *
1) "key1"
2) "name"
127.0.0.1:6379[2]> 
######################################################
#自增,自减,设置步长
127.0.0.1:6379[2]> incr views  #自增1
(integer) 1
127.0.0.1:6379[2]> incr views
(integer) 2
127.0.0.1:6379[2]> get views
"2"
127.0.0.1:6379[2]> decr views #自减1
(integer) 1
127.0.0.1:6379[2]> get views
"1"
127.0.0.1:6379[2]> incrby views 10 #自增10,设置步长
(integer) 11
127.0.0.1:6379[2]> decrby view 5 #自减5,没有就会新建
(integer) -5
127.0.0.1:6379[2]> decrby views 5
(integer) 6
127.0.0.1:6379[2]> keys *
1) "view"
2) "views"
3) "key1"
4) "name"
127.0.0.1:6379[2]> get view
"-5"
127.0.0.1:6379[2]> 
######################################################
#获取指定位置的v值
127.0.0.1:6379> set key1 "hello,tang"
OK
127.0.0.1:6379> get key1
"hello,tang"
127.0.0.1:6379> getrange key 0 3 #获取指定区间的key的v值
""
127.0.0.1:6379> getrange key1 0 3
"hell"
127.0.0.1:6379> getrange key1 0 -1 #获取v全部值内容
"hello,tang"
127.0.0.1:6379> 
######################################################
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 1 xx  #替换指定起始位置的v值。
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
127.0.0.1:6379> 
######################################################
#setex (set with expire) #设置过期时间
#setnx (set if not exist) #不存在在设置,(在分布式锁中常常会使用)
127.0.0.1:6379> setex key3 30 "hello" #设置key3的值为hello,30秒后过期。
OK
127.0.0.1:6379> ttl key3
(integer) 23
127.0.0.1:6379> ttl key3
(integer) 20
127.0.0.1:6379> ttl key3
(integer) 20
127.0.0.1:6379> setnx key3 "redis" # 设置key3的值,如果不存在会创建失败,如果不存在会创建。
(integer) 0
127.0.0.1:6379> ttl key3
(integer) 3
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> setnx mykey "redis"
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
3) "mykey"
127.0.0.1:6379> setnx mykey "MongoDB"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> 
######################################################
#mset  #设置多个值
#mget  #获取多个值
127.0.0.1:6379> mset key1 v1 key2 v2 key3 v3 #设置多个值
OK
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> mget key1 key2 key3 #获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx key1 v1 key2 v2 #原子性,一个不成功全部不成功
(integer) 0
127.0.0.1:6379> msetnx key1 v1 key4 v4
(integer) 0
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379
######################################################
#设置对象
#设置一个user:1对象,值为json字符串来保存一个对象。
#这里的key是一个巧妙的设计:user:{id}:{filed},如此设计在redis中是完全ok的。
127.0.0.1:6379> mset user:1:name zhangsan user:2:age 2
OK
127.0.0.1:6379> mget user:1:name user:2:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> 
######################################################
#getset
#先get然后在set,如果不存在,则返回null,存在则获取原来的值,并设置新的值。
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongDB
"redis"
127.0.0.1:6379> get db
"mongDB"
127.0.0.1:6379>

2、List(列表)

1)、相关命令操作

##################################################
#讲list集合存入
#lpush
#rpush
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> keys *
1) "list"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
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"
##################################################
#删除
#lpop
#rpop
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> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list#删除list表尾的数据(右)
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
##################################################
#取值Lindex
127.0.0.1:6379> lindex list 1
"one"
##################################################
#查询长度
#Llen
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list #查询list长度
(integer) 3
127.0.0.1:6379>
##################################################
#移除指定的值
#Lrem
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 one #移除指定的值,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three #移除指定的2个值
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379> lpush list three
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
#######################################################
#修剪
#trim
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpush mylist "hello3"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> ltrim mylist 1 2 #通过下标指定的长度,这个list已经被改变了,截断了只剩下截取的元素。
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379>
###############################################################
#移除列表的最后一个元素,并把它添加到另一个地方
#rpoplpush
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpush mylist "hello3"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> rpoplpush mylist myotherlist
"hello3"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "hello3"
127.0.0.1:6379>
###########################################
#更新列表的值,将指定值替换为另外一个值。
#lset
127.0.0.1:6379> clear
127.0.0.1:6379> exists list #判断列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item #不存在会报错
(error) ERR no such key
127.0.0.1:6379> lpush list value1 #
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "value1"
127.0.0.1:6379> lset list 0 item #更新值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379>
####################################################
#插入操作
#Linsert
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "word"
(integer) 2
127.0.0.1:6379> linsert mylist before "word" "other" #在某个值前面插入
(integer) 3
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command 
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "word"
127.0.0.1:6379> linsert mylist after "word" "new" #在某个值后面插入
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "word"
4) "new"
127.0.0.1:6379>

3、set(集合)

######################################################
#sadd  添加
#smembers  查看元素
#scard  查看元素个数
#sismember  判断是否存在
127.0.0.1:6379> sadd myset "hello" #set一个值,set集合中添加元素。
(integer) 1
127.0.0.1:6379> sadd myset "Jack"
(integer) 1
127.0.0.1:6379> sadd myset "Jock"
(integer) 1
127.0.0.1:6379> smembers myset #查看指定set的所有值。
1) "Jock"
2) "Jack"
3) "hello"
127.0.0.1:6379> sismember myset hello #判断某一个值是不是在集合中。
(integer) 1
127.0.0.1:6379> sismember myset hell
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> scard myset #获取set集合的个数。
(integer) 3
127.0.0.1:6379>
127.0.0.1:6379> smembers myset
1) "Jock"
2) "Jack"
3) "hello"
##########################################
#srem
127.0.0.1:6379> sismember myset hello #移除指定的值
(integer) 1
127.0.0.1:6379> sismember myset hell
(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> smembers myset
1) "Jock"
2) "Jack"
127.0.0.1:6379>
#################################
#随机抽取元素
#srandmember  
127.0.0.1:6379> smembers myset
1) "Jock"
2) "Jack"
127.0.0.1:6379> srandmember myset
"Jock"
127.0.0.1:6379> srandmember myset
"Jock"
127.0.0.1:6379> srandmember myset
"Jack"
127.0.0.1:6379> srandmember myset
"Jock"
127.0.0.1:6379> srandmember myset
"Jock"
127.0.0.1:6379> srandmember myset
"Jack"
127.0.0.1:6379> srandmember myset
"Jock"
127.0.0.1:6379>
127.0.0.1:6379> srandmember myset 2  #随机抽取指定个数的元素
1) "Jock"
2) "Jack"
127.0.0.1:6379> 
############################################
#删除指定的key,随机删除key!
127.0.0.1:6379> spop myset #随机移除set集和中的一个元素
"Jock"
127.0.0.1:6379> smembers myset
1) "Jack"
2) "tom"
127.0.0.1:6379> smembers myset
1) "Jack"
2) "tom"
127.0.0.1:6379> spop myset
"tom"
127.0.0.1:6379> smembers myset
1) "Jack"
127.0.0.1:6379>
#############################################################
#删除并移动
#smove 
127.0.0.1:6379> sadd myset jack1
(integer) 1
127.0.0.1:6379> sadd myset jack2
(integer) 1
127.0.0.1:6379> sadd myset jack3
(integer) 1
127.0.0.1:6379> smembers myset
1) "Jack"
2) "jack2"
3) "jack3"
4) "jack1"
127.0.0.1:6379> sadd myset1 tom1
(integer) 1
127.0.0.1:6379> smembers myest1
(empty array)
127.0.0.1:6379> smembers myeset1
(empty array)
127.0.0.1:6379> sadd myset1 tom
(integer) 1
127.0.0.1:6379> smembers myset1
1) "tom1"
2) "tom"
127.0.0.1:6379> smove myset myset1 jack
(integer) 0
127.0.0.1:6379> smove myset myset1 "jack"
(integer) 0
127.0.0.1:6379> smembers myset1
1) "tom1"
2) "tom"
127.0.0.1:6379> smembers myset
1) "Jack"
2) "jack2"
3) "jack3"
4) "jack1"
127.0.0.1:6379> smove myset myset1 "jack"
(integer) 0
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> smembers myset
(empty array)
127.0.0.1:6379> clear
127.0.0.1:6379> sadd myset jack
(integer) 1
127.0.0.1:6379> sadd myset jack1
(integer) 1
127.0.0.1:6379> sadd myset jack2
(integer) 1
127.0.0.1:6379> smembers myset
1) "jack"
2) "jack2"
3) "jack1"
127.0.0.1:6379> sadd myset1 tom
(integer) 1
127.0.0.1:6379> sadd myset1 tom1
(integer) 1
127.0.0.1:6379> sadd myset1 tom2
(integer) 1
127.0.0.1:6379> smembers myset
1) "jack"
2) "jack2"
3) "jack1"
127.0.0.1:6379> smembers myset1
1) "tom1"
2) "tom"
3) "tom2"
127.0.0.1:6379> smove myset myset1 "jack"
(integer) 1
127.0.0.1:6379> smembers myset1
1) "jack"
2) "tom1"
3) "tom"
4) "tom2"
127.0.0.1:6379>
#################################################
#集合,无序
#差集 SDIFF
#交集 
#并集
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key1 d
(integer) 1
127.0.0.1:6379> sadd key c
(integer) 1
127.0.0.1:6379> sadd key d
(integer) 1
127.0.0.1:6379> sadd key f
(integer) 1
127.0.0.1:6379> sdiff key1 key2 #差集
1) "a"
2) "c"
3) "d"
4) "b"
127.0.0.1:6379> sdiff key1 key
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key #交集
1) "d"
2) "c"
127.0.0.1:6379> sunion key1 key #并集
1) "b"
2) "f"
3) "a"
4) "d"
5) "c"
127.0.0.1:6379>

4、hash(哈希)

Map集合,key-Map集合!

#########################################
#set一个具体key-value
#
127.0.0.1:6379> hset myhasg field1 Tom
(integer) 1
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset myhash field1 Tom  #设置一个值
(integer) 1
127.0.0.1:6379> hget myhash field1 #获取一个字段值
"Tom"
127.0.0.1:6379> hmset myhash field1 hello field2 word #set多个key-value
OK
127.0.0.1:6379> hmget myhash field1 field2 #获取多个字段值
1) "hello"
2) "word"
127.0.0.1:6379> hgetall myhash #获取所有值
1) "field1"
2) "hello"
3) "field2"
4) "word"
127.0.0.1:6379>
############################################
#删除
#hdel
27.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "word"
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "word"
127.0.0.1:6379>
##################################################
#获取长度
#hlen
127.0.0.1:6379> hmset myhash field1 TT field2 Man field3 Woman
OK
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "Man"
3) "field1"
4) "TT"
5) "field3"
6) "Woman"
127.0.0.1:6379> hlen myhash
(integer) 3
127.0.0.1:6379>
#########################################################
# hexists 判断hash值是否存在
# hkeys  获取key
# hvals  获取value
127.0.0.1:6379> hexists myhash field1
(integer) 1
127.0.0.1:6379> hexists myhash field4
(integer) 0
127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field1"
3) "field3"
127.0.0.1:6379> hvals myhash
1) "Man"
2) "TT"
3) "Woman"
127.0.0.1:6379>
#######################################################
#incr
#decr
127.0.0.1:6379> hset myhash field4 5 #指定增量
(integer) 1
127.0.0.1:6379> hset myhash field4 1
(integer) 0
127.0.0.1:6379> hget myhash field4
"1"
127.0.0.1:6379> hset myhash field4 5
(integer) 0
127.0.0.1:6379> hget myhash field4
"5"
127.0.0.1:6379> hincrby myhash field4 -1
(integer) 4
127.0.0.1:6379> hget myhash field4
"4"
127.0.0.1:6379> hsetnx myhash field4 hello #如果不存在则可以设置
(integer) 0
127.0.0.1:6379> hsetnx myhash field4 word #如果存在则不能设置
(integer) 0
127.0.0.1:6379> hget myhash field4
"4"
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "Man"
3) "field1"
4) "TT"
5) "field3"
6) "Woman"
7) "field4"
8) "4"

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

x、小结

· 它实际上是一个链表,before Node after,left , right都可以插入值

· 如果key不存在,创建新的链表

· 如果key存在,新增内容

· 如果移除了所有值,空链表,也代表不存在!

· 在两边插入或者改动值,效率最高,中间元素相对与来说会低一点。

· 消息排队,消息队列(Lpush Rpop),栈(Lpush Lpop)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值