Redis使用与操作k-v数据

时间:2022-07-22
本文章向大家介绍Redis使用与操作k-v数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

redis是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储,Redis支持数据的备份,即master-slave模式的数据备份。

redis常用来做什么

缓存:

使用redis做为缓存热数据,内存中的数据也提供了AOF和RDB等持久化机制可以选择,可以冷存储也可以热存储。在spring中使用Aop构建redis缓存的自动生产和清除,例如: Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,然后将数据插入redis,然后再update或者delete数据库中的数据

计数器

统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错。

队列

相当于消息系统,ActiveMQ,RocketMQ等工具类似,由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务

位操作

redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示我们上面例子里面的用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统,上面我说的几个场景也就能够实现。用到的命令是:setbit、getbit、bitcount

分布式锁与单线程机制

验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交

秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”

排行榜

谁得分高谁排名往上。使用有续集,sorted set

redis使用

  • 登录 启动 redis 客户端
redis-cli

在远程服务上执行命令

redis-cli -h host -p port -a password

使用PING测试服务是否启动

  • keys相关命令 查询redis中现存的所有key name
keys *

//序列化给定 key ,并返回被序列化的值。
DUMP key 

//检查给定 key 是否存在
exists keyname

//设置key的过期时间
expire keyname seconds

//返回key的类型
type  key 
  • redis String 相关 添加key-value对,获得值
set key value

get key

返回substring

getrange  key start end 

更改key的value

getset key value

获得多个key的值

mget key1 key2 key3

将key对应的值+1或-1,在字符串后拼接字符串

incr key /decr key

append key  svalue
  • redis hash 相关

Redis 中每个 hash 可以存储40多亿,value为hash

添加/删除/存在

hdel/hset/hexists   key  value

添加多个k-v对,全部获取

hmset key hashkey1 value hashkey2 value

hgetall key

获取表中的所有key或所有value,字段数量

hkeys key

hvals key

hlen key
  • redis list 相关 是一个按照插入顺序排序的有序列表

入队与获取队中元素

lpush key value
lpush key value2

lrange key 0 10

通过数据在队中的位置获取数据

lindex key 1

获取列表的长度

llen key

弹出

//将头弹出并获取
lpop key
//将尾弹出并获取
rpop key

blpop/brpop key timeout
//分别为若无元素,则等待timeout时间,阻塞
  • redis set 相关

Set 是 String 类型的无序集合。集合成员是唯一的

添加k-v对/获取成员变量

sadd key redis
sadd key mongodb

smembers key

scard key //获取成员数

集合之间的交叉并

sdiff 差集
sinter 交集
sunion  并集

删除集合中元素,判断是否在集合中

spop 移除并返回
sismember key member 判断一个元素是否在集合中
  • sorted set 相关 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

添加元素,同时zadd可以更新已存在元素的得分

zadd country 1 china
zadd country 2 American
zadd country 3 japen

zrange country 0 10 withscores

获取成员数

zcard key 获取成员数
zrank key member 获取指定成员的索引
zscore key member 获取成员的分数值
  • HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

统计去重元素个数

添加元素,统计数字

pfadd name zhang
pfadd name redis
pfadd name mongodb

pfcount name

redis 发布与订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

订阅

subscribe redisChat
// 一次多个订阅
psubscribe

发布

publish redisChat "message"
  • 事务 使用Multi可以开始一个事务,使用Exec用来执行事务

discard用来取消所有事务