redis 安装 常用数据类型操作命令 布隆过滤器使用笔记

1. 官网

https://redis.io/
https://redis.cn/

2. 安装

2.1. 下载

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2.2. 解压

tar -xf redis-5.0.5.tar.gz

2.3. 安装

make
make install PREDIX=/opt/redis

2.4. 修改环境变量

vim /etc/profile
export REDIS_HOME=/opt/redis
export PATH=.$PATH:REDIS_HOME/bin

2.5. 安装服务

cd utils
./install_server.sh 按脚本填写配置,自动生成脚本文件在/etc/redis/6379
  • 一个物理机可以有多个redis实例,通过端口区分
  • 可执行程序就一份在目录,多个实例需要各自的配置文件,持久化目录等资源
  • service redis_6379 start/stop/restart/status
  • /etc/init.d/
  • 安装后默认启动redis

2.6. 外部服务器访问

修改配置文件

bind 127.0.0.1 192.168.89.14
protected-mode yes > no 

重启

3. 特点

  • 二进制安全,需要在客户端约定好编码格式
  • 单线程 epoll多路复用

4. 数据类型及操作

4.1. string

4.1.1. 命令

  • help @string 查询string相关帮助信息
  • select db 选择数据库(0-20)
  • set k v 设置一个数据
  • set k1 v nx nx仅仅可以新建的时候进行插入数据
  • set k2 v xx xx仅仅可以更新的时候进行更新数据
  • mset k1 v1 k2 v2 可以进行设置多个值
  • get k 返回一个v,没有返回nil
  • mget k1 k2 k3 获取多个v
  • getrange k start end 获取一个索引从start到end,双闭合的区间
  • setrange k start value 更新区间范围,我们可以从start的索引开始,更新value数据
  • del key 删除一条kv数据
  • keys pattern 用正则查询key
  • flushdb 清空db
  • append k v 给k的数据进行追加v这个数据
  • type k 查看value是什么类型
  • object encoding k 查看v的数据类型
  • incr k1 将integer的数据类型加一
  • incrby k1 v 将integer数据类型加v
  • decr k1 将integer的数据类型减一
  • decrby k1 v 将integer数据类型减v
  • incrbyfloat k1 v 将integer数据类型加一个浮点型
  • 数据不够长的时候编码是embstr,之后会变为raw格式
  • strlen k1 查看v的长度
  • redis-cli --raw 进行进入,会识别编码(比如自动识别GBK)
  • getset k1 v 更新新值,返回旧值
  • bitpos key bit [start] [end] 查看从start到end的字节,第一次bit出现的位置
  • bitcount key [start] [end] 查看start到end的时候,1出现的次数
  • bitop and andkey k1 k2 执行k1 k2 按位与操作
  • bitop or orkey k1 k2 按位或操作

4.1.2. 适用场景

  • 数值
    • 抢购
    • 秒杀
    • 详情页
    • 点赞
    • 规避并发下,对数据库的事务操作,完全由redis内存操作代替
  • 二进制位操作
    • 用户系统,统计用户登录天数.且窗口随机
    • 628活动,总礼物,备货多少
      • 僵尸用户
      • 冷热用户/忠诚用户
      • 活跃用户统计: 随即窗口

4.2. list

4.2.1. 命令

  • lpush、lpop、rpush、rpop 和栈一样
  • lrange 0 -1 所有元素查看
  • lindex key index 查看索引位置的值
  • lrem key count value 移除count数量的value
  • linsert key after afval value 在键后面插入值
  • linsert key before befval value 在key前面插入值
  • blpop 阻塞式取值(等待有值再取出)
  • ltrim key [start] [end] 修剪,进行修剪队列

4.2.2. 应用

  • 队列

4.3. hash

4.3.1. 命令

  • hset key filed value 设置一个key field的值
  • hget key field 获得一个key field的值
  • hmset key field value field value 设置多个field的值
  • hmget key field fied 获取多个field的值
  • hkeys key 查看所有的key
  • hvals key 查看所有的field
  • hincrby key field num 增加num值

4.4. set

4.4.1. 命令

  • sadd key v1 v2 v3… 插入v1,v2,v3…
  • smember key 列出所有的value
  • srem v1 v2 删除v1,v2…
  • sinter k1 k2 求交集并返回
  • sinterstore dest k1 k2 交集结果存储dest
  • sunion k1 k2 求并集返回
  • sunionstore dest k1 k2 并集存储dest
  • sdiff k1 k2 求差集并返回
  • sdiffstore dest k1 k2 求差集存储dest
  • srandmember k1 随机返回一个成员
  • srandmember k1 num 随机返回num个元素,num为正数,取出一个去重结果集,如果为负数,那么取出不去重结果集

4.5. zset

4.5.1. 命令

  • zadd k score mem score mem 插入数据后增加权重

  • zrange k 0 -1 取出所有的值

  • zrangebyscore k low high 取出从low到high区间的数据

  • zrange k start end 从start到end之间的数据取出

  • zscore k v 返回一个数据的分值

  • zscore k v 返回一个数据的排行

  • zrange k 0 -1 withscores 携带分数取出

  • zincrby k incrscore v 增加一个值的分值

  • zunionstore k keynum k1 k2…[aggregate max] 多个key的并集[最大值]

5. 管道连接redis(一次发送多个命令,节省往返时间)

echo -e "set s1 1\nincr s1\n get s1" |nc localhost 6379

6. 发布订阅(pub/sub)

subscribe channel 订阅消息
publish channel message 发布消息

7. 事务(transactions)

multi 开启事务
...
exec 执行事务

在事务开启前使用watch,
如果执行EXEC 或者DISCARD, 则不需要手动执行UNWATCH 。
watch 如果数据被更改,那就不执行事务,对事务只生效一次
multi
exec 执行的时候如果期间watch的值被修改 则事务提交不成功

127.0.0.1:6379> watch s1 
OK
127.0.0.1:6379> set k6 1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set s7 1
QUEUED
127.0.0.1:6379> EXEC
(nil)

unwatch 取消监视

discard 放弃事务

8. 布隆过滤器(redisbloom)

8.1. 模块导入

redis模块 https://redis.io/modules
在redis.io/modules选择redisbloom的github,克隆下来
解压,make编译,将redisbloom.so这个链接库复制到/opt/redis
执行

redis-server --loadmodule /opt/redis/redisbloom.so 

也可以在/etc/init.d/redis_6379 文件中修改

EXEC=/usr/local/bin/redis-server > EXEC=/usr/local/bin/redis-server --loadmodule /opt/redis/redisbloom.so 

Redis Bloom的使用:

BF.ADD k1 V   添加数据值
BF.EXISTS k1 V    判断是否存在

8.2. bloom filter,counting bloom,cukcoo是什么?

  1. bloom filter
    它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
    运用:网页黑名单、垃圾邮件、爬虫网址判重
    Java想要使用BloomFilter可以考虑使用google的guava

  2. counting bloom
    这个计数器,使用4位bit来表示一个计数(这个数字可以自己指定长度的),所以我们可以进行计数。

(详细参考:https://wenku.baidu.com/view/9e5832df7f1922791688e84f.html

  1. cuckcoo
    cuckoo filter的产生源于一个故事,盒子故事(参考:https://www.cnblogs.com/chuxiuhong/p/8215719.html
    我们使用2个表存,可以存放在任意一个,那么数学期望由O(logN/loglogN)变成O(loglogN)。
    因此,而设计出来布谷过滤器。
    布谷过滤器使用2个哈希表,元素计算哈希,如果没有值,则放入,有值,则踢出元素,重新计算新的哈希,放入,如此反复。参考附件:cuckoo filter

redis的布隆过滤器模块也是用到了cuckoo的哈希,在cuckoo.c文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值