redis_note_02_string

查看help
  1. redis-cli --help
  2. redis-cli连接成功, 进入 127.0.0.1:6379> 后, 可以使用 help @set 查看命令帮助; 或输入 help @ 后, 按tab键来查看命令; 或直接输入 help 可以查看help使用方式
string
  1. 字符
  2. 数值
  3. bitmap
基本使用

set

set redis "hello world"
#输出OK
get redis
#输出"hello world"

set “key” “value” nx
set “key” “value” xx

set "redis" "hello world" nx
#输出nil, 表示已存在, 不设置
set "redis2" "hello world" nx
#输出ok, not exists, 可以设置
set "redis2" "hello world2" xx
#输出OK, key存在可以更新
set "redis4" "hello world2" xx
#输出nil, key不存在不可以更新

mset mget 批量插入查询操作

mset k1 v1 k2 v2 k3 v3
#输出OK
mget k1 k3
#输出
#1) "v1"
#2) "v3"

append对value进行追加

append k1 " append"
get k1
#输出"v1 append"

getrange 截取value部分数据

getrange k1 0 -1
#输出"v1 append"
getrange k1 3 8
#输出"append"
getrange k1 3 -1
#输出"append"

strlen 计算长度

strlen k1
#输出(integer) 9

type 查看key的类型

type k1
#输出string

object查看值类型

object encoding k1
#输出"raw"(包含字符和数字)
set 99 "99"
object encoding 99
#输出"int"
set gin hello
#输出OK
object encoding gin
#输出"embstr"

二进制安全(redis传输为字节流(所以使用redis要注意存取的编码);
字符流(需要通过类型转换))

#清理数据
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
#虽然有int(数字) embstr(字符串)区分, 但是都只是一个字符
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> set k2 10000
OK
#发现int并不是4个字节表示的数值类型, 表明10000指的5个字符
127.0.0.1:6379> strlen k2
(integer) 5 

编解码

127.0.0.1:6379> set k3 翔
OK
127.0.0.1:6379> get k3
"\xe7\xbf\x94"
127.0.0.1:6379> strlen k3
(integer) 3
#退出当前客户端后, 重新连接(编码取决于当前shell客户端的编码, utf-8对于中文是3字节)
redis-cli --raw
127.0.0.1:6379> strlen k3
3
127.0.0.1:6379> get k3
翔

存储都是字节, 计算是redis经过了类型转换

127.0.0.1:6379> set k4 7
OK
127.0.0.1:6379> incr k4
8

msetnx原子操作(批量中一个失败则都失败)

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> msetnx k1 1 k2 2
1
127.0.0.1:6379> mget k1 k2
1
2
127.0.0.1:6379> msetnx k3 3 k2 2
0
127.0.0.1:6379> mget k1 k2
1
2

setbit

127.0.0.1:6379> flushall
OK
#在二进制下 0000 0000 的第二位设置为1 -> 0100 0000 即ASCII表的第64(16进制: 0x40 )位 @ 符号
127.0.0.1:6379> setbit k1 1 1
0
127.0.0.1:6379> get k1
@
127.0.0.1:6379> strlen k1
1
#在二进制下第8位设置为1, 0100 0000 -> 0100 0001, 即ASCII表的第65位 A 符号
127.0.0.1:6379> setbit k1 7 1
0
127.0.0.1:6379> strlen k1
1
127.0.0.1:6379> get k1
A
#超过8位, 则需要新增一个字节, 0100 0001 -> 
#0100 0001  A
#0100 0000  @
127.0.0.1:6379> setbit k1 9 1
0
127.0.0.1:6379> strlen k1
2
127.0.0.1:6379> get k1
A@
#bitpos查询出现第一个bit值的位置, bitpos key bit [start] [end]
#start表示开始字节的索引(8位一个字节)
#end表示结束字节的索引(8位一个字节)
#表示查询第一次出现1的位置, 范围从0下标字节到0下标字节
127.0.0.1:6379> bitpos k1 1 0 0
1
#表示查询第一次出现1的位置, 范围从1下标字节到1下标字节
127.0.0.1:6379> bitpos k1 1 1 1
9
#表示查询第一次出现1的位置, 范围从0下标字节到1下标字节
127.0.0.1:6379> bitpos k1 1 0 1
1
#表示查询第一次出现0的位置, 范围从0下标字节到1下标字节
127.0.0.1:6379> bitpos k1 0 0 1
0

bitcount统计出现bit的个数, bitcount key bit [start] [end]

127.0.0.1:6379> bitcount k1 0 0
2
127.0.0.1:6379> bitcount k1 0 1
3

bitop operation destkey key [key …]

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> setbit k1 1 1
0
127.0.0.1:6379> setbit k1 7 1
0
127.0.0.1:6379> get k1
A
127.0.0.1:6379> setbit k2 1 1
0
127.0.0.1:6379> setbit k2 6 1
0
127.0.0.1:6379> get k2
B
#与操作(有0则0), 0100 0001 & 0100 0010 -> 0100 0000
127.0.0.1:6379> bitop and andkey k1 k2
1
127.0.0.1:6379> get andkey
@
#或操作(有1则1), 0100 0001 | 0100 0010 -> 0100 0011
127.0.0.1:6379> bitop or orkey k1 k2
1
127.0.0.1:6379> get orkey
C

bitmap应用场景: 统计用户365天内活跃的次数, 窗口期随意

#sean这个客户在第1 7 364天登录过
127.0.0.1:6379> setbit sean 1 1
0
127.0.0.1:6379> setbit sean 7 1
0
127.0.0.1:6379> setbit sean 364 1
0
#占用字节数
127.0.0.1:6379> strlen sean
46
#最后两天登录了几次
127.0.0.1:6379> bitcount sean -2 -1
1

618活动: 送用户礼物, 需要准备多少礼物
僵尸用户
冷热用户/忠诚用户

活跃用户统计, 随机窗口

#用户编号从0开始递增
#20201101这天1号用户登录了
setbit 20201101 1 1
#20201102这天1, 7号用户登录了
setbit 20201102 1 1
setbit 20201102 7 1
#统计20201101-20201102两天有几个活跃用户
127.0.0.1:6379> bitop or 20201101-2 20201101 20201102
1
127.0.0.1:6379> bitcount 20201101-2 0 -1
2

incr decr
场景: 抢购, 秒杀, 详情页, 点赞数, 评论数
规避高并发下,对数据库事务操作, 完全由redis内存操作代替

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set k1 9
OK
127.0.0.1:6379> incr k1
10
127.0.0.1:6379> decr k1
9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值