redis string类型 04

String

redis
字符串
数值
bitmap位图
help @string

String 字符串常用命令

命令作用
set设置value
get获取value
append追加
setrange可以把一个字符串覆盖到原有的某一个部分
getrange截取key对应value的某一部分
strlen查看字符串长度
getset取回老的值,设置新的值
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> append k1 " world"
(integer) 11
127.0.0.1:6379> get k1
"hello world"
127.0.0.1:6379> getrange k1 6 10
"world"
127.0.0.1:6379> getrange k1 6 -1
"world"
127.0.0.1:6379> setrange k1 6 mashibing 
(integer) 15
127.0.0.1:6379> get k1
"hello mashibing"
127.0.0.1:6379> strlen k1
(integer) 15
127.0.0.1:6379> type k1
string

redis正反向索引,正向索引0,1,2,反向索引,-1,-2,-3

NX
127.0.0.1:6380> set k1 hello
OK
127.0.0.1:6380> get k1
"hello"
127.0.0.1:6380> set k1 ooxx nx  ## nx不存在的时候设置
(nil)
127.0.0.1:6380> get k1
"hello"
127.0.0.1:6380> 

nx不存在的时候设置
应用场景,比如分布式锁的时候,一堆人都想通过redis删除一个文件,谁去删呢,一堆人拿很多链接对一个单线程的redis发起set k1 nx ,那么谁成功了,谁就拿到锁了,剩下的人都失败了。

XX
127.0.0.1:6380> set k2 hello xx
(nil)
127.0.0.1:6380> get k2
(nil)
127.0.0.1:6380> 

xx,只有存在的时候才可以操作,他只能跟新
[nx] 只能新建
[xx] 只能更新

mset,mget,设置多条,取出多条

127.0.0.1:6380> mset k3 a k4 b
OK
127.0.0.1:6380> mget k3 k4
1) "a"
2) "b"
127.0.0.1:6380> 

getset取出老的值,设置新的值,减少一次IO通信

127.0.0.1:6379> getset k1 mashibing
"99.5"
127.0.0.1:6379> 

msetnx 设置多个值,只有都成功了,所有的才会成功

127.0.0.1:6379> msetnx k1 a k2 b
(integer) 1
127.0.0.1:6379> mget k1 k2
1) "a"
2) "b"
127.0.0.1:6379> msetnx k2 c k3 d
(integer) 0
127.0.0.1:6379> mget k1 k2
1) "a"
2) "b"
127.0.0.1:6379> 

String 底层存储的是byte字节流,数据不会被破坏,所以redis是二进制安全的

127.0.0.1:6379> set k3 a
OK
127.0.0.1:6379> strlen k3
(integer) 1
127.0.0.1:6379> append k3 中
(integer) 4
127.0.0.1:6379> strlen k3
(integer) 4
127.0.0.1:6379> get k3
"a\xe4\xb8\xad"
127.0.0.1:6379> 

bitmap字节
一个字节8位 ====》 00000000
正序为12345678
bitmap

127.0.0.1:6379> setbit k1 1 1
(integer) 0
127.0.0.1:6379> strlen k1
(integer) 1
127.0.0.1:6379> get k1
"@"
127.0.0.1:6379> setbit k1 7 1
(integer) 0
127.0.0.1:6379> strlen k1
(integer) 1
127.0.0.1:6379> get k1
"A"
127.0.0.1:6379> setbit k1 9 1
(integer) 0
127.0.0.1:6379> strlen k1
(integer) 2
127.0.0.1:6379> get k1
"A@"


这波操作,
第一步setbit k1 1 1 00000000==》01000000
第二步setbit k1 7 1 01000000==》 01000001
验证:

man ascii
ASCII(7)                            Linux Programmer's Manual                           ASCII(7)

NAME
       ascii - ASCII character set encoded in octal, decimal, and hexadecimal

DESCRIPTION
       ASCII  is  the  American  Standard Code for Information Interchange.  It is a 7-bit code.
       Many 8-bit codes (e.g., ISO 8859-1) contain ASCII as their lower half.  The international
       counterpart of ASCII is known as ISO 646-IRV.

       The following table contains the 128 ASCII characters.

       C program '\X' escapes are noted.

       Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
       ────────────────────────────────────────────────────────────────────────
       000   0     00    NUL '\0' (null character)   100   64    40    @
       001   1     01    SOH (start of heading)      101   65    41    A
       002   2     02    STX (start of text)         102   66    42    B
       003   3     03    ETX (end of text)           103   67    43    C
       004   4     04    EOT (end of transmission)   104   68    44    D
       005   5     05    ENQ (enquiry)               105   69    45    E
       006   6     06    ACK (acknowledge)           106   70    46    F
       007   7     07    BEL '\a' (bell)             107   71    47    G
       010   8     08    BS  '\b' (backspace)        110   72    48    H
       011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
       012   10    0A    LF  '\n' (new line)         112   74    4A    J
       013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K

Hex 40 @
40十六进制前4位是0100,后四位是0000
Hex 41 @
41十六进制前4位是0100,后四位是0001

十进制65是A
扩展:
字符集 ascii其他一般叫做扩展字符集扩展:
其他字符集不在对ascii重编码
0xxxxxxx你自己写一个程序,
字节流读取,
每字节判断

命令作用
bitpos作用寻找第一个二进制位的位置
bitcount统计1出现了几次
bitop or destkey k1 k2k1和k2进行或运算,值为destkey
bitop and destkey k1 k2k1和k2进行与运算,值为destkey
	0		1
k1 01000001 01000000

127.0.0.1:6379> bitpos k1 1 0 0
(integer) 1
127.0.0.1:6379> bitpos k1 1 1 1
(integer) 9
127.0.0.1:6379> bitcount k1 0 1
(integer) 3
127.0.0.1:6379> 

位图应用场景

1,有用户系统,统计用户登录天数,且窗口随机
setbit sean 1 1
setbit sean 7 1
setbit sean 364 1
STRLEN sean
BITCOUNT sean -2 -1
           01   02  03  04
   sean    0    1   0   1   010101
   json    0    1   0   1   011111
   每用户46B *  用户数 10000000  =460 000 000
2,京东就是你们的,618做活动:送礼物
大库备货多少礼物
假设京东有2E用户

僵尸用户冷热用户/忠诚用户活跃用户统计!

随即窗口
比如说 1号~3号  
连续登录要     去重
setbit 20190101   1  1
setbit 20190102   1  1
setbit 20190102   7  1
bitop  or   destkey 20190101  20190102
BITCOUNT  destkey  0 -1 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值