redis的基础命令和五种数据类型

1.五种数据结构
redis中支持内存中的hashMap处理数据,在value的结构中存在为不同情况不同功能准备的5种不同的数据类型
String:字符串
Hash:面向对象的结构
List:双向链表
Set:集合
ZSet:有序集合

2.操作命令
String类型(包含了基本命令)
在这里插入图片描述
2.1基础命令(不仅仅操作string,还包括exists del expire ttl)
对key值的管理,才能实现对数据的增删拆改
○ keys pattern(*)
keys可以查看想要的匹配到的所有key值,如果pattern=*
查看当前redis内存中所有key数据
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
“18”
127.0.0.1:6379> set name wanglaoshi
OK
127.0.0.1:6379> keys *
1) “age”
2) “name”
127.0.0.1:6379>
127.0.0.1:6379> keys na*
1) “name”
127.0.0.1:6379>
○ del key值
根据key删除任意类型的value数据;
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> keys *
1) “age”
127.0.0.1:6379>
○ exists key值
判断一个key是否存在
127.0.0.1:6379> keys *
1) “name”
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379>
判断一个key-value中的key是否存在于内存数据,也可以使用get
127.0.0.1:6379> get age
“18”
127.0.0.1:6379> get alfasld
(nil)
127.0.0.1:6379>
exists判断一个key是否存在时,没有对key的value进行读取,只是使用类似contain方法,但是get是将key的value读取过来的,redis最新版本中可以支持value最大存储数据的1GB,exists判断效率更高
○ save
将内存数据以rdb持久化模式存储到一个rdb文件中,默认情况这个持久化文件dump.rdb在redis根目录
127.0.0.1:6379> keys *
1) “age”
2) “name”
127.0.0.1:6379> save
OK
127.0.0.1:6379>
日志文件中出现数据持久化的提示
28822:M 20 Aug 17:14:33.215 * DB saved on disk
默认情况是根目录一个dump.rdb文件保存持久化数据
[root@10-9-39-13 redis-3.2.11]# ll dump.rdb
-rw-r–r-- 1 root root 93 Aug 20 17:20 dump.rdb

默认大小是77字节,保持了一个基本结构;
只要存在dump.rdb,server启动时会自动加载,从中恢复磁盘数据
设计一种结构,定时的调用save命令保证数据的完整
○ flushall
将内存数据中的数据,和dump文件的数据全部清空,在测试环境旧
数据不影响新数据测试的情况下可以使用,测试环境/生产环境决不允许执行
127.0.0.1:6379> set name haha
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379>
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

○ flushdb
select 0-15整数:redis默认情况下,会在内存中划分16个数据库区域,相互之间数据是隔离的,可以通过select 整数选择使用不同的区域,默认的是0号库
127.0.0.1:6379[15]> select 1
OK
127.0.0.1:6379[1]> set name haha
OK
127.0.0.1:6379[1]> set location shanghai
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
3.0版本之前,没有redis-cluster的结构,这种隔离的分库常用来做数据分片操作,不同的分片可以实现分布式存储,redis-cluster技术结构出现后,全部默认使用0号库就足够了;

flushdb:db指的就是0-15号分库,清空分库中内存数据,dump持久化文件不受影响(flushall>>flushdb)
很多环境中不确定要不要清除数据(flushall),又要实现数据的不冲突,就可以使用flushdb,如果清除错误,可以通过持久化文件恢复

○ expire key值 时间值(秒)
对一个已有的key-value进行超时的处理.永久数据超时时间-1,过期数据超时时间-2.时间灵敏度秒,保持对内存的合理使用127.0.0.1:6379> set name haha
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> expire name 50
(integer) 1
127.0.0.1:6379> ttl name
(integer) 46
127.0.0.1:6379> ttl name
(integer) 45
127.0.0.1:6379>
○ ttl key值
查看一个key的超时时间剩余时间,秒为单位
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379>

○ pexpire key值 时间值(毫秒)
○ pttl key值

查看一个key的超时时间剩余,毫秒为单位
○ type key值
127.0.0.1:6379> type name
string
127.0.0.1:6379> lpush list01 1
(integer) 1
127.0.0.1:6379> type list01
list
127.0.0.1:6379>

○ help 命令:查看一个redis命令的usage
127.0.0.1:6379> help set

SET key value [EX seconds] [PX milliseconds] [NX|XX]
summary: Set the string value of a key
since: 1.0.0
group: string
一般命令的使用到官网查看

2.2String的命令
○ set: 新增/覆盖(写)
○ get:获取读数据
○ incr/decr:自增自减 步数1

可以对string类型中纯数字的数据进行自增自减操作,步数1
127.0.0.1:6379> set num 100
OK
127.0.0.1:6379> incr num
(integer) 101
127.0.0.1:6379> decr num
(integer) 100
127.0.0.1:6379>
应用场景:一些程序中变动的数字,上下变动1,-1;投票软件工具
○ incrby/decrby:自增自减,步数自定义
127.0.0.1:6379> incrby num 10
(integer) 110
127.0.0.1:6379> decrby num 20
(integer) 90
127.0.0.1:6379>
应用场景:在线人数
○ append:追加,修改的一种
set可以修改数据,覆盖,将已有的数据重新覆盖写了一遍,追加性能速度比覆盖高.
127.0.0.1:6379> set location beijing
OK
127.0.0.1:6379> append location yizhuang
(integer) 15
127.0.0.1:6379> get location
“beijingyizhuang”
127.0.0.1:6379>

○ mset/mget:批量操作,批量的新增,批量的获取
127.0.0.1:6379> mset name1 wang name2 liu name3 wu
OK
127.0.0.1:6379> keys *
1) “name3”
2) “name1”
3) “name2”
127.0.0.1:6379> mget name1 name2 name3 name4
1) “wang”
2) “liu”
3) “wu”
4) (nil)
127.0.0.1:6379>
效果和多次执行set/get一样,但是速度远超单个设置,批量操作只占用带宽传输一次

String类型的应用场景,就是easymall实现缓存,通过对象的json字符串作为String 类型value,提供数据读写工作,缓存

2.3hash类型(包括hget hset hexists)
面向数据结构,面向对象的处理数据的结构方式
在这里插入图片描述
○ hset key field value
在这里插入图片描述
利用hash结构存储一个数据,可以使用hset key值 属性值 属性value
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hset user name wang
(integer) 1
127.0.0.1:6379>
○ hget key field
读取一个hash结构中某个属性的值
127.0.0.1:6379> hget user name
“wang”
127.0.0.1:6379> hget user age
“29”
127.0.0.1:6379> hget user location
(nil)
127.0.0.1:6379>
○ 批量操作
hmset/hmget
127.0.0.1:6379> hmset student age 18 studentNum 25536 studentName wang
OK
127.0.0.1:6379> hmget student age studentNum studentName
1) “18”
2) “25536”
3) “wang”
127.0.0.1:6379>
○ hkeys/hvals
分别获取属性名称的返回集合,与属性值的返回集合
127.0.0.1:6379> hkeys student
1) “age”
2) “studentNum”
3) “studentName”
127.0.0.1:6379> hvals student
1) “18”
2) “25536”
3) “wang”
127.0.0.1:6379>
○ hlen
获取一个hash类型数据中所有属性的个数
127.0.0.1:6379> hlen user
(integer) 2
127.0.0.1:6379> hlen student
(integer) 3
127.0.0.1:6379>
○ hdel(del区别,一个是删除key-value,一个是删除hash中属性)
删除某个属性和属性值
127.0.0.1:6379> hdel user age name
(integer) 2
127.0.0.1:6379> keys *
1) “name3”
2) “name1”
3) “name2”
4) “student”
○ hincrby key field 步数
对hash数据中纯数字的数据做内存操作的自增(没有自减)
hash的应用场景,也可以实现对象的缓存处理,但是代码和结构比String复杂,如果偏向于对数据存储的结构紧密(hash),造成编写代码,调用命令的复杂.
2.4LIST(lpush/rpush,lpop/rpop,lrange)
双向链表,特点,头尾操作速度快,中间的操作速度慢,有排序,分为上(左)(头)/下(右)(尾)
在这里插入图片描述
○ lpush/rpush list的key值 元素值
从头或者从尾插入数据
127.0.0.1:6379> lpush list01 100 200 300 400 500
(integer) 5
127.0.0.1:6379> rpush list01 one two three four five
(integer) 10
○ lrange list的key值 起始下标 结束下标(如果查看全部,0 -1)
127.0.0.1:6379> lrange list01 0 -1
1) “500”
2) “400”
3) “300”
4) “200”
5) “100”
6) “one”
7) “two”
8) “three”
9) “four”
10) “five”
127.0.0.1:6379>
○ linsert
LINSERT key BEFORE|AFTER pivot value
对一个list数据做插入元素操作,只能从头从上向下对比数据,pivot参数元素,value插入的数据,before/after 在参数元素的前后进行数据写入
127.0.0.1:6379> lrange list02 0 -1
1) “three”
2) “two”
3) “one”
127.0.0.1:6379> linsert list02 after one 100
(integer) 4
127.0.0.1:6379> linsert list02 before one 200
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379> lrange list02 0 -1
1) “three”
2) “two”
3) “200”
4) “one”
5) “100”

○ lrem 删除
LREM key count value
由于一个list链表中元素的值可以重复,删除元素时,需要携带删除的个数
count=正整数,0,负整数
正整数:从头想尾部寻找相同元素个数删除
负整数:从尾到头部寻找相同元素个数删除
0:全删
127.0.0.1:6379> lrange list03 0 -1
1) “200”
2) “100”
3) “200”
4) “100”
5) “200”
6) “100”
127.0.0.1:6379> lrem list03 2 100
(integer) 2
127.0.0.1:6379> lrange list03 0 -1
1) “200”
2) “200”
3) “200”
4) “100”
127.0.0.1:6379> lpush list04 100 200 100 200 100 200
(integer) 6
127.0.0.1:6379> lrem list04 -2 100
(integer) 2
127.0.0.1:6379> lrange list04 0 -1
1) “200”
2) “100”
3) “200”
4) “200”
127.0.0.1:6379> lrem list04 0 200
(integer) 3
127.0.0.1:6379> lrange list04 0 -1
1) “100”
127.0.0.1:6379>

○ ltrim
保留一定范围内的元素值,其他都删除
127.0.0.1:6379> lrange list01 0 -1
1) “500”
2) “400”
3) “300”
4) “200”
5) “100”
6) “one”
7) “two”
8) “three”
9) “four”
10) “five”
127.0.0.1:6379> ltrim list01 0 4
OK
127.0.0.1:6379> lrange list01 0 -1
1) “500”
2) “400”
3) “300”
4) “200”
5) “100”
127.0.0.1:6379>

○ lpop/rpop
从头部删除一个元素,从尾部删除一个元素,并且将删除的数据返回
作用是取得list中头和尾的数据;
127.0.0.1:6379> lrange list01 0 -1
1) “500”
2) “400”
3) “300”
4) “200”
5) “100”
127.0.0.1:6379> lpop list01
“500”
127.0.0.1:6379>

○ llen
查看元素的个数(list长度)
127.0.0.1:6379> lrange list01 0 -1
1) “400”
2) “300”
3) “200”
4) “100”
127.0.0.1:6379> llen list01
(integer) 4
127.0.0.1:6379>

○ lset
按照下标,修改元素的值
127.0.0.1:6379> lrange list01 0 -1
1) “400”
2) “300”
3) “200”
4) “100”
127.0.0.1:6379> lset list01 2 two
OK
127.0.0.1:6379> lrange list01 0 -1
1) “400”
2) “300”
3) “two”
4) “100”
127.0.0.1:6379>

两个list之间的操作(用来做消息队列确认机制)
○ rpoplpush
从第一个list尾部删除元素,
从第二个list头部插入元素
127.0.0.1:6379> lrange list01 0 -1
1) “400”
2) “300”
3) “two”
4) “100”
127.0.0.1:6379> lrange list02 0 -1
1) “three”
2) “two”
3) “200”
4) “one”
5) “100”
127.0.0.1:6379> rpoplpush list01 list02
“100”
127.0.0.1:6379> lrange list02 0 -1
1) “100”
2) “three”
3) “two”
4) “200”
5) “one”
6) “100”
127.0.0.1:6379>

2.5set类型
没有排序,不允许元素重复,一个集合的数据结构
在这里插入图片描述
○ 向集合添加一些数据
sadd key 元素值
127.0.0.1:6379> sadd favor math english
(integer) 2
127.0.0.1:6379>
○ srem key member删除
127.0.0.1:6379> sadd favor history
(integer) 1
127.0.0.1:6379> srem favor mathv history

○ scard key 返回元素个数
127.0.0.1:6380> scard favor
(integer) 2

sismember key element判断元素是否在集合中
127.0.0.1:6380> sismember favor histroy
(integer) 0
127.0.0.1:6380> sismember favor math
(integer) 1
127.0.0.1:6380>

○ srandmember key 随机抽取几个元素
127.0.0.1:6380> sismember favor math
(integer) 1
127.0.0.1:6380> srandmember favor 1
1) “math”
127.0.0.1:6380> srandmember favor 1
1) “english”

○ smembers key获取所有元素
127.0.0.1:6380> sadd favor english histry
(integer) 2
127.0.0.1:6380> smembers favor
1) “english”
2) “histry”
3) “math”
127.0.0.1:6380>

集合间的操作
○ sinter set1 set2 交集
127.0.0.1:6380> sadd favor1 english histroy math
(integer) 3
127.0.0.1:6380> sadd favor2 english math chinese
(integer) 3
127.0.0.1:6380> sinter favor1 favor2
1) “english”
2) “math”
127.0.0.1:6380>

○ suinon set1 set2 并集
127.0.0.1:6380> sunion favor1 favor2
1) “english”
2) “chinese”
3) “histroy”
4) “math”
127.0.0.1:6380>

127.0.0.1:6380> sdiff favor1 favor2
1) “histroy”
127.0.0.1:6380> sdiff favor2 favor1
1) “chinese”
127.0.0.1:6380>

2.6ZSet结构(sorted set)
在集合的基础上绑定一个score作为排序的依据
比较典型的使用场景是排行榜系统。例如视频网站需要对用户上传的视频做排行榜榜
在这里插入图片描述
单集合(集合内)
○ zadd key score memeber添加成员
127.0.0.1:6380> zadd result 10 xiaolaoshi
(integer) 1
127.0.0.1:6380> zadd result 20 wanglaoshi
(integer) 1
127.0.0.1:6380> zadd result 30 chenlaoshi
(integer) 1
127.0.0.1:6380>

○ zcard key计算成员个数同set

○ zscore key member获取某个成员的分数
127.0.0.1:6380> zadd result 30 chenlaoshi
(integer) 1
127.0.0.1:6380> zscore result chenlaoshi
“30”
127.0.0.1:6380> zadd result 40 chenlaoshi
(integer) 0
127.0.0.1:6380> zscore result chenlaoshi
“40”
127.0.0.1:6380>

计算成员的排名
○ zrank key member
127.0.0.1:6380> zrank result xiaolaoshi
(integer) 0
127.0.0.1:6380> zrank result wanglaoshi
(integer) 1
127.0.0.1:6380>

删除成员
○ zrem key member
127.0.0.1:6380> zrem result wanglaoshi
(integer) 1
127.0.0.1:6380> zrank result wanglaoshi
(nil)
127.0.0.1:6380>

○ 增加成员的分数
zincrby key increment member
127.0.0.1:6380> zincrby result 50 xiaolaoshi
“60”
127.0.0.1:6380>

返回指定排名范围的成员
○ zrange key start end
127.0.0.1:6380> zrange result 0 1
1) “chenlaoshi”
2) “xiaolaoshi”
127.0.0.1:6380>

返回指定分数范围的成员
○ zrangebysore key min max

返回指定分数范围成员个数
○ zcount key min max

删除指定排名内的升序元素
○ zremrangebyrank key start end

127.0.0.1:6380> zremrangebyrank result 0 1
(integer) 2
127.0.0.1:6380> zrange result 0 1
(empty list or set)
127.0.0.1:6380>

删除指定分数范围的成员
○ zremrangebyscore key min max

2 集合间的操作
zset数据中的所有交集并集的操作,是将结果输出到一个新的集合中
在这里插入图片描述
交集 zinterstore destination numkeys key
destination:新的zset集合
numkeys:求交集,并集的个数
key:所有zset集合
127.0.0.1:6380> zadd result1 10 xiao
(integer) 1
127.0.0.1:6380> zadd result1 20 wang
(integer) 1
127.0.0.1:6380> zadd result2 30 xiao
(integer) 1
127.0.0.1:6380> zadd result2 40 wang
(integer) 1
127.0.0.1:6380> zinterstore out1 2 result1 result2
(integer) 2
127.0.0.1:6380> zrange out1 0 -1 withscores
1) “xiao”
2) “40”
3) “wang”
4) “60”
127.0.0.1:6380>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值