redis常用命令和位运算

一、首先启动redis

1.后台启动

cd /usr/local/soft/redis/bin
nohup redis-server redis.conf &

2.连接redis

 redis-cli 

3.关闭redis

ps -aux | grep redis
kill -9 

二、命令

1.登录客户端后,获取帮助

Help

Help <tab>

Help set

Help @string

2.设置字符串值

SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX 设置过期时间,秒,等同于SETEX key seconds value
PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value
NX 键不存在,才能设置,等同于SETNX key value
XX 键存在时,才能设置
2.1设置多个键的字符串值
MSET key value [key value ...]
2.2键不存在时,设置字符串值
MSETNX key value [key value ...]
注意:这是原子操作
:
set s1 abc
set s2 12
set se abc ex 15

mset s3 3 s4 4 s5 5
msetnx s5 A5 s6 6

3.过期时间设置

3.1过期
Redis中可以给Key设置一个生存时间(秒或毫秒),当达到这个时长后,这些键值将会被自动删除

3.2设置多少秒或者毫秒后过期
EXPIRE key seconds
PEXPIRE key milliseconds

3.3设置在指定Unix时间戳过期
EXPIREAT key timestamp
PEXPIREAT key milliseconds-timestamp

3.4删除过期
PERSIST key

3.5生存时间
Time To LiveKey的剩余生存时间

3.6查看剩余生存时间
TTL key
PTTL key
key存在但没有设置TTL,返回-1
key存在,但还在生存期内,返回剩余的秒或者毫秒
key曾经存在,但已经消亡,返回-22.8版本之前返回-1
:
set se abc ex 15
ttl s6
expire s6 60
pttl s6
persist s6
pttl s6

EXPIREAT cache 1355292000
PEXPIREAT mykey 1555555555005

点击查询时间戳转换

4.查找键

KEYS pattern

pattern取值
* 任意长度字符
? 任意一个字符
[] 字符集合,表示可以是集合中的任意一个
keys s*
keys s?
keys s[13]
keys *
keys ??

5.键类型、键是否存在、键重命名、键删除

5.1键类型
TYPE key
5.2键是否存在
EXISTS key
5.3键重命名
RENAME key newkey
RENAMENX key newkey
5.4键删除
DEL key [key ...]

6.获取值、获取多个给定的键的值、返回旧值并设置新值、字符串长度、获取追加覆盖字符串

6.1获取值
GET key
6.2获取多个给定的键的值
MGET key [key ...]
6.3返回旧值并设置新值
GETSET key value
如果键不存在,就创建并赋值
6.4字符串长度
STRLEN key
6.5追加字符串
APPEND key value
如果键存在就追加;如果不存在就等同于SET key value
6.6获取子字符串
GETRANGE key start end
索引值从0开始,负数表示从字符串右边向左数起,-1表示最有一个字符
6.7覆盖字符串
SETRANGE key offset value
:
APPEND s6 123
getrange s1 1 2
getrange s1 0 -1
getrange s1 -2 -1
getrange s1 0 10000
SETRANGE s6 3 e
SETRANGE s6 3 efghijk
SETRANGE newkey 5 hello
SETRANGE s6 3 efghijk

7.步长1的增减、步长增减

7.1步长1的增减
INCR key
DECR key
字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串
7.2步长增减
INCRBY key decrement
DECR key decrement
字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串

三、位图bitmap

1.什么是位图

位图不是真正的数据类型,它是定义在字符串类型中

一个字符串类型的值最多能存储512M字节的内容

位上限:2^(9+10+10+3)=2^32b

2.位图基本命令

设置某一位上的值
SETBIT key offset value 
offset偏移量,从0开始
value不写,默认是0

获取某一位上的值
GETBIT key offset

返回指定值0或者1在指定区间上第一次出现的位置
BITPOS key bit [start] [end]
set str1 ab
setbit str1 6 1
setbit str1 7 0
get str1
这个结果是什么?                      结果是bb

a的ASCLL码值为97   对应的二进制为0110 0001
b的ASCLL码值为98   对应的二进制为0110 0010
1.首先 setbit str1 6 1 把偏移量为6的位置用1替换(偏移量暂时在这看成下标更好理解)替换完成后二进制就是0110 0011,换算成十进制就是99也就是小c,此时get str1 结果为cb
2.然后执行setbit str1 7 0 得到的二进制为0110 0010.换算成十进制为98,就是小b,所以最终结果为bb

3.位操作

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 dteskey 上
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey(都是11)
BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey(只要有一个1就为1)
BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey(相同为0,不同为1)
BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey(反转,例:原来0000 1111 反转之后1111 0000)
除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0
空的 key 也被看作是包含 0 的字符串序列
思考:a位或b是什么? 

4.统计指定位区间上值为1的个数(重点)

BITCOUNT key [start] [end] 
从左向右从0开始,从右向左从-1开始,注意官方start、end是位,测试后是字节
BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计
BITCOUNT testkey 0  -1等同于BITCOUNT testkey
最常用的就是 BITCOUNT testkey

四、Redis的二进制位

set s1 ab
bitcount s1
bitcount s1 0 0
bitcount s1 1 1
set ch 中
bitcount ch
bitcount ch 2 2

在这里插入图片描述

五、redis其他相关命令

登录不同的库
redis-cli --help
redis-cli -n 2

清除当前库数据
FLUSHDB

清除所有库中的数据
FLUSHALL

六、案例

1.案例一

网站用户的上线次数统计(活跃用户)
用户ID为key,天作为offset,上线置为1
ID为500的用户,今年的第1天上线、第30天上线
SETBIT u500 1 1
SETBIT u500 30 1
BITCOUNT u500
KYES u*

2.案例二

按天统计网站活跃用户
天作为key,用户ID为offset,上线置为1
求一段时间内活跃用户数
SETBIT 20160602 15 1
SETBIT 20160601 123 1
SETBIT 20160606 123 161日到610日的活跃用户
BITOP OR 20160601-10 20160601 20160602 20160603 20160610
BITCOUNT 20160601-10
结果为2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值