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
二、基本命令
-
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地理空间
# 存储 { 维度, 经度, 地名 }
# 可计算两地距离

浙公网安备 33010602011771号