redis五种主要数据类型及基础操作

一、简介

1)测试redis服务的性能

​ # redis-benchmark -h IP

2)查看redis服务的统计信息:info; info replication

​ >info /返回所有相关信息

​ >info replication /只返回replication的相关信息

3)redis的数据库实例:由redis服务来创建和维护

​ / 数据库实例的个数由配置文件决定( 默认16个 ),

​ / 切换数据库实例select 15 /15是下标,第16个数据库实例

4)查看当前数据库实例中所有的key的数据量:dbsize
5)查看当前数据库实例中所有key的名称:keys *
6)清空当前数据库实例:flushdb
7)清空所有数据库实例:flushall
8)查看配置文件里所有配置信息:**config get ***

​ >config get port /查看端口

​ >config get * /查看所有信息

9)启动服务并连接客户端

​ >bin/redis-server redis.conf

​ >redis-cli --raw (--raw 中文)

10)关闭服务

​ >redis-cli shutdown

二、基本命令

  1. key的操作命令

    ① 获得符合规则的键名列表

    > key pattern [pattern支持通配符格式]

    keys * /查看所有的key

    [注意] redis命令不区分大小写,变量要区分大小写

    ② exists key key key /批量匹配

    ③ del key key key /批量删除(只针对String类型)

    ④ type key /获取键值的数据类型

    move key index /将键值对对象移动到其他数据库实例

    ​ >move name1 15 /将key为name1的键值移动到15号库

    > select 15 /切换到15号库

    ⑥ expire key 时间 /设置生存时间

    ​ >expire name1 60 /设置key为name1的键值生存时间为60s

    ​ >ttl name1 /查看key为name1的生存时间,

    ⑦ rename key newkey /重命名键名,若key不存在会创建

三、redis五种数据结构

1.String -> key:value

​ # (二进制安全) value可以为文本、图片、视频。value <= 512MB

​ # value只能是一个元素

​ # 写数据 >set

​ # 读数据 >get

​ # 设置value的同时,设置生存时间 >setex key 5 value

​ # 若key不存在则设置成功,否则设置失败 >setnx key value

​ # 批量设置 >mset key value key value...

​ # meset与setnx的结合 > msetnx key value key value...

​ # 追加字符串 ( 若不存在则新建 ) > append key value

​ # 闭区间获取子串 ( 只能通过下标从左往右取,下标:左到右从0开始;右到左从-1开始 )

​ > getrange key startIndex endIndex

​ # 覆盖(用于替换的字符长度需要与原字符长度相同) > setrange key startIndex value

​ # get与set的组合 > getset key value

​ # 自增(只对value为整数的key操作) > incr key

​ # 自减 > decr key

​ # 获取value的长度(若不存在返回0) > strlen key

​ # 可以加具体的数字(只对value为整数的key操作) > incrby key increment

​ # 减具体的数字 > decrby key 数值

​ # 对浮点数做加指定操作 > incrbyfloat key 数值(可以为负值)

2.List -> key:[value, value, value,.....]

​ # value值有序可重复

​ # 底层实现:链表

​ # 只能从两端进行读写

​ # 写数据

​ 头插法:>lpush

​ >lpushx key value value... (key必须存在,若不存在则不会创建这个key)

​ 尾插法:>rpush

​ # 读数据 [ 通过下标 ] > lrange 0 -1

​ # 在value1前/后插入value2 > linsert key before/after value1 value2

​ # 从列表两边弹出元素 > lpop /从left(左边)删除一个元素,并返回该元素

​ > rpop

​ # 移除并获取列表的第一个元素和列表名 > blpop key timeout (若timeout=0,着会一直等待)

​ > brpop

​ # 获取指定列表中下标的元素 > lindex index key

​ # 将list1最右端的一个元素取出并删除,放入list2的最左端(若timeout=0,着会一直等待)

​ > brpoplpush list1 list2 timeout

​ # 将list1最右端的一个元素取出并删除,放入list2的最左端 > rpoplpush list1 list2

​ # 返回列表长度 > llen key

​ # > lrem key count value

3.Set -> key:{value, value ,value, ... } 【无序集合】

​ # value值无序不可重复

​ # 底层实现:集合(Map)

​ # 写入数据 >sadd

# 基本命令

​ # SADD 添加 ( value不能重复 )

​ > sadd key1 value1

​ > sadd key1 value2

​ # SMembers 返回集合的所有元素

​ > smembers key

​ # Srem 删除集合中指定的元素

​ > srem key value1 value2

​ # Scard 返回集合元素的数量

​ > scard key

​ # SrandMember (count返回多少个成员)

​ >srandmember key count (若count不写,默认为1,则随机返回一个成员。

​ count超出成员总个数为正数时,不重复返回所有成员。

​ count超出成员总个数为负数时,会返回重复的成员【先返回所有成员,再从开始又继续返回】。)

​ # Smove

​ >smove key1 key2 value / 将key1中的value移动到key2中

​ # SPOP

​ > spop key count (count不能为负,与srandmember中的count类似)

​ # SIsMember 判断成员是否存在

​ >sismember key value (存在返回1,不存在返回0。一次只能判断一个value )

​ # SScan (类似Hscan)

# 集合并、交、差运算

​ # Sunion 集合并计算(只看结果)

​ > sadd key1 key2 。。。

​ # SunionStore 带存储功能集合并运算

​ >sunionstore key1 key2 key3 (将key2与key3并运算后,放入key1中。若key1存则覆盖,不存在则创建)

​ # Sinter 交运算

​ > sinter key1 key2 ......

​ # SinterStore

​ > sinterstore key1 key2 key3 .... (将key1之后的key做交集后放入key1中)

​ # SDiff 差运算

​ > sdiff key1 key2 (key1 - key2 [ key1必须大于key2 ] )

​ # SDiffStore (将key1-key2存入key1-key2)

​ > sdiff key1-key2 key1 key2

4.Hash -> key:对象

​ # 不可重复无序(散列表)

​ # eg: key:{{key:value, key:value, key:value, .....}} /加粗部分为一个field

​ # 只能存一个对象,无序不可重复

​ # 一般存储对象属性较少的数据

# 基本操作命令

​ # Hset (field若已存在则修改,若不存在则插入 [ 可批量设置 ])

​ > hset key field value

​ # Hget (一次只能获取一个field)

​ >Hget key field

​ # HMset

​ # HMget

​ # Hgetall (一次扫描完所有数据后返回)

​ > hgetall key

​ # Hexists(只能返回 1[存在] 或 0[不存在],只能写一个field)

​ > hexists key field

​ # HDel (可批量删除)

​ > hdel key field field .....

# 其他命令

​ # HLen (有多少个field)

​ > hlen key

​ # HSetNx (field存在则不创建,若不存在则创建)

​ # HStrLEN (单个field的长度)

​ # HVals (获取field的所有value)

​ > hvals key

​ # HKeys (获取field的所有key)

​ > hkeys key

​ # HIncrby (针对整数,增加指定数值,若不存在会先创建在增加)

​ > hlncrby key field.key

​ # HLncebyFloat

​ # Hscan(一次只扫描一部分数据 [ 最多几十条数据 ] 就返回,返回游标和值)【可避免redis发生阻塞】

​ [ 游标:位置,初始值为0,扫描最后一部分数据返回的游标也为0。即从0开始,到0结束 ]

​ count:一次扫描多少条(数据量少时会无法体现)

​ match:匹配

​ > hscan key 游标 [match pattern] count 数值

5.Zset(sorted set) -> key:[{score menmber}, value, .....] 【有序集合】

​ # eg: city: 1 beijing, 2 tianjin, 3 shanghai, ...

​ # score为数值类型(可重复),menmber可为任意值(不能重复)

​ /会根据score中前面的数字排序,value数字后面的值不能重复

​ /排序时,若score相同,着根据menmber中的字母排序(从小到大 ),若member为数值则值小的在前

​ /添加数据时,若member相同,则会覆盖原来的值,即修改原来的score

​ # Zadd (增加)

​ > zadd key [nx|xx] [ch] [incr] score member

​ / nx 原score member存在,则添加失败,否则添加成功

​ / xx 修改已存在member的score,

​ / ch 返回执行成功的命令数

​ / incr 当score member不存在时,用incr与不用效果相同

​ 当score member存在时,着会增加score的值

​ > zadd key incr 10 lisi / 若lisi存在,则lisi的score增加10

​ > zadd key nx 12 zhangshan 10 lisi

​ # Zrange (返回成员)

​ > zrange key start stop [withscores] / withscore 带score返回member

​ # Zcount (返回指定分数值范围内的键值对)

​ >zcount key min max / 左括号表示不包括,没有右括号;-inf【负无穷】,+inf【正无穷】

​ > zcount key (5 +inf /返回score为5到正无穷的值,

​ > zcount key 3 5 / 返回 3<= score <= 5 的值

​ # Zrem (删除成员,可批量删除)

​ >zrem key member

​ # Zcard (返回成员总个数)

​ >zcard key

​ # Zincrby (给member对应的score增加,若不存在则添加)

​ > zincrby key increment member

​ > zincrby key 5 c

​ # Zscore (返回一个成员的分数值)

​ >zscore key member

​ # Zrank (返回指定member在有序集合中的排名数,从0开始)

​ > zrank key member

​ # ZunionStore (取并集)

​ > zunionstore dest numkeys key [key....] [weights weight] aggregate [ sum | min | max ]

​ / dest:并集后参数的新的集合的key

​ / weights:权重。权重的个数要<=集合个数,权重会与集合的score相乘

​ / aggregate sum:当两个集合存在相同member时,score值为两集和score的和

​ # ZinterStore (求交集)

​ # Zrangebyscore ()

​ > zrangebyscore key min max [withscores] [limit offset count]

​ / min max :分数值的范围

​ / limit 0 1:第0页查1条,0相当于member的下标值

​ # Zremrangebyscore (根据分数值范围删除)

​ # Zremrangebyrank (根据下标删除)

​ # Zrevrange (返回倒叙,score相同,member倒叙)

​ > zrevrange key start stop [withscores]

​ # Zrevrangebyscore (通过score逆序返回)

​ > zrevrangebyscore key max min [withscores] [limit offset count]

​ # Zrevrank (返回成员逆置下标)

​ # Zscan (与Hscan原理相同)

6.Bitmap位图

​ # 存储二元数据,以二进制存储数据

7.Hyperloglog

​ # 返回数据元素种数(去重)

​ # 统计用户访问总量

8.Geospatial地理空间

​ # 存储 { 维度, 经度, 地名 }

​ # 可计算两地距离

博客引流:https://sunforritual.github.io/yangxs.github.io/

posted @ 2022-08-26 15:31  杨先生ㄨ  阅读(131)  评论(0)    收藏  举报