RxJavajava 知识点Java 杂谈

Redis使用与操作k-v数据

2019-01-24  本文已影响2人  Tim在路上

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-cli

在远程服务上执行命令

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

使用PING测试服务是否启动

keys *

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

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

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

//返回key的类型
type  key 
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 可以存储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

入队与获取队中元素

lpush key value
lpush key value2

lrange key 0 10

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

lindex key 1

获取列表的长度

llen key

弹出

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

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

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

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

sadd key redis
sadd key mongodb

smembers key

scard key //获取成员数

集合之间的交叉并

sdiff 差集
sinter 交集
sunion  并集

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

spop 移除并返回
sismember key member 判断一个元素是否在集合中

不同的是每个元素都会关联一个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 获取成员的分数值

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"

discard用来取消所有事务

上一篇 下一篇

猜你喜欢

热点阅读