关于Redis

分类专栏:
Redis

文章标签:
Java自学
Redis
原创

1.Redis是什么

redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

2.支持的语言

Redis支持的语言

3.redis的应用场景有哪些

1,会话缓存(最常用)
2,消息队列,比如支付2,消息队列,比如支付
3,活动排行榜或计数
4,发布,订阅消息(消息通知)
5,商品列表,评论列表等5,商品列表,评论列表等

4.redis数据类型

Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)

(1)字符串(字符串)

它是redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB

相关命令如下

1)strlen 查看字符串的长度

2)append 增加后缀,返回字符串的长度

3) 当value的值是整数时,可以通过命令直接进行数学运算 incr 自增 ,返回最新的值。 decr 自减, 也返回最新的值。 incrby 增加,区别是增加计算的参数 decrby 减少,同上。

4) 范围内操作的命令 getrange key start end 获取从初始位置到结束位置的值,从0计数 ==》 类似subString

setrange key start newStr 设置从起始位置开始,替换指定位置为新的字符串

  1. 整合命令 setex= set + expire -> 使用方式: setex + key + 时间 + value

setnx = set + exists = set if not exists->使用方式: setnx + key + value 如果key不存在,则设置数据,返回1。如果存在,不设置,返回0。

getset 先取出原来的值,再设置为新值 -> 使用方式: getset + key + value 返回旧值。

6) 批量操作 mget = more get -> 使用方式 : mget + key1 + key2 + key3

参数接收多个key, 结果返回多个value mset = more set 使用方式:mset + key1 + value1 + key2 + value2

一次设置多个key和value, 参数本身是个map msetnx 使用方式同上。

字符串类型

(2)hash(哈希)

redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

相关命令如下
  1. 存取数据

hset 使用方式 -> hset hash1 key1 value1

hget 使用方式 -> hget hash1 key1 =>"value1"

hsetnx 如果不存在即set新的key值

hmset/hmget 批量处理更便捷

2) 遍历数据 hkeys 查看所有的key值

hvals 查看所有的value值

hlen 查看数据长度

hgetall 返回全部的key和value

hexists 判断是否存在某个key, 存在返回1,不存在返回0

3) 变更数据 hdel 删除数据 -> 使用方式 hdel key field_key

hincrby 对整数的增加操作,指定增加的范围 -> 使用方式 hincrby key field_key num

哈希类型

(3)表(列表)

redis的简单的字符串列表,它按插入顺序排序

相关命令如下

1)存取操作 push pop range lpush : 从左侧存入数据 —》栈结构 弹出时执行lpop (从左侧弹出)

rpush: 从右侧存入数据 —》队列结构 弹出时执行lpop (从左侧弹出)

lrange: 范围内查看数据->使用方式:lrange key start end

2)对list本身的操作 llen 查看长度

lindex 获取某一个位置的值,下角标从0开始

lrem 删除n个value的值->使用方式: lrem key N value

ltrim 截取某个范围的数据重新赋值给key->使用方式: ltrim key start end (下角标从0开始)

linsert 插入数据到某个位置的前后->使用方式: linsert key before/after oldValue newValue

如果要插入数据到头部,还可以使用 lpushx->使用方式:lpushx key value

同理,如果要插入数据到尾部,可以使用 rpushx,使用方式同上

lset 可以更改指定位置的值->使用方式: lset key index value

列表

(4)set(集合)

字符串类型的无序集合,也不可重复

相关命令如下

1)读写操作 sadd 创建set类型的value

scard key 查看set的大小

smembers key 查询set中的所有值

sismember key value 判断value是否在所对应的set中 在则返回1,不在返回0

2)更新操作 srem key value1 value2 删除set中一至多个数据的值

srandmember key num 可以在set中随机出num个元素

spop key num 可以随机弹出num个元素返回

3)交互操作 smove key1 key2 value 移动元素value从key1到key2

4)支持求并集、交集和差集 sinter key1 key2 代表求两个集合的交集(两者都有的元素

sdiff key1 key2 返回存在在key1中但不存在在key2中的元素,两者的差集

sunion key1 key2 返回并集(两个集合中的所有元素)

集合

(5)zset(有序集合)

string类型的有序集合,也不可重复 有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名

相关命令如下

1)读取操作 zadd 创建或增加zset的元素值,每一个元素值都包含 <分数,value> -> 使用方式: zadd key1 score1 value1 score2 value2 ...

zrange key1 start end 指定在start到end的范围内查看元素 如果要查看分数 ,加上withscores

zrangebyscore key1 minScore maxScore 指定分数范围内查询元素 参数说明 分数前增加“(” 代表开区间(不包含当前值)

支持limit分页 limit + offset(偏移量) + num(返回的数量)

zrem key1 + value 删除指定的value值

2)统计操作 zcard + key 统计元素个数

zcount + key + minScore + maxScore 统计给定分数范围内的元素个数 比如统计及格人数等需求

zscore + key + member 查询指定成员的分数

zrank + key + member 返回指定成员的索引位(因为有序,所以位置代表排名)

zrevrank + key + member默认从低到高排序,逆序正好代表排名

zrevrange 原来是从小到大排列,逆序后从大到小排列

有序集合

(6) Geo (位置信息)
相关命令如下

1) geoadd + key + 经度 + 维度 + 成员名 通过经纬度存储地址,支持存储多个

2) geodist + key + member1 + member2 + 距离单位 查询两个地点之间的相对距离 距离单位支持:m(米)、km(千米)、mi(英里)、ft(英尺)

3)geopos 查询成员经纬度数据

4)geohash 进行哈希编码 ,得到编码结果

  1. georadius 以某个经纬度的位置为中心,划一个指定距离的半径,返回集合中满足条件的地址。 这就是“附近的XXX”的一种实现方式。

使用方式: georadius + key + 中心的经度 + 中心的纬度 + 半径的距离 + 半径的单位

可选参数: withdist 返回距离; withcoord 返回经纬度 ; withhash 返回哈希编码;

(7) bitmap(位图)
相关命令如下

1)读取操作 setbit key index 0/1 设置某个位置的值为0/1

getbit key index 获取某个位置的值

get + key 零存整取,直接获得二进制字符数组对应的字符串

2) 统计操作 bitcount 查询数组中有多少个1 支持参数 字符的起始位置到终止位置 可以计算每个字符的二进制有多少个1

(8) HyperLogLog(基数统计)
相关命令如下

pfadd 增加数据

pfcount 统计数据 (去重)

(9) Stream(流)

1)消息的发布与订阅

消息 命令: subscribe + channel 订阅频道的命令,会持续接收消息

publish + channel + message 在某个频道发布消息,相应的订阅者会接收到

  1. Stream
生成消息

xadd 生成消息,返回消息ID(时间戳+顺序),顺序指的该毫秒下产生的第几条消息

xlen 查看消息列表的长度

xrange key - + 遍历所有的消息

xdel key + 消息ID 通过消息id删除消息

读取消息

xread 读取消息,返回消息列表

支持参数count + num,指定返回消息的数量

支持参数block + num, 可以阻塞等待消息的返回,此时0-0 应该替换为“$”,代表从尾部接收

5.redis的持久化

redis持久有两种方式 快照(快照),仅附加文件(AOF)

快照(快照)

将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中

保存900 1 #900秒内如果超过1个Key被修改,则启动快照保存

保存300 10 #300秒内如果超过10个Key被修改,则启动快照保存

保存60 10000 #60秒内如果超过10000个重点被修改,则启动快照保存

仅附加文件(AOF)

使用AOF持久时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)

AOF持久化存储方式参数说明

appendonly yes
#开启AOF持久化存储方式

appendfsync always #收到写命令后就立即写入磁盘,效率最差,效果最好

appendfsync everysec #每秒写入磁盘一次,效率与效果居中

appendfsync no #完全依赖操作系统,效率最佳,效果没法保证

6.redis的性能测试

redis-banchmark是Redis自带的一个压力测试工具

参数如下 参数

  • 作者:潘震
  • 版权声明:自由转载-非商用-非衍生-保留署名(创意共享3.0许可证)
  • 评论

    留言