标签:格式 登录 二进制 pre cond 位置 fse xxx 通过
select db redis 下默认有有16个表,0~15可以通过:select 2 或者 select 11这样的方式切换表
keys pattern 查看该表下匹配到的 keys 命令 keys * 查看表下所有key
type key 查看key对应的类型
exists key 检测key是否是表中存在
expire key time 为某个key设置超时时间
move key db 将key 移动到另一个db下
del key 删除指定key 还可以一次性删除多个: del key1 key2 key3
127.0.0.1:6379> keys *
1) "loveyue"
2) "name"
3) "num"
127.0.0.1:6379> type name
string
127.0.0.1:6379> exists info
(integer) 0
127.0.0.1:6379> expire name 1
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "loveyue"
2) "num"
127.0.0.1:6379> set name2 'lina'
OK
127.0.0.1:6379> set name3 'david'
OK
127.0.0.1:6379> keys name*
1) "name2"
2) "name3"
127.0.0.1:6379> del name2 name3
(integer) 2
127.0.0.1:6379> keys name*
(empty list or set)
127.0.0.1:6379> keys *
1) "loveyue"
2) "num"
127.0.0.1:6379> set name lina ex 10 nx
OK
127.0.0.1:6379> get name
"lina"
setex key seconds value 直接设置超时时间 setex name 5 lina 这个5秒后就不在了
get key 获取key 对应的value 如:get name
127.0.0.1:6379> mset name1 lina name2 david name3 wang
OK
127.0.0.1:6379> mget name1 name2 name3
1) "lina"
2) "david"
3) "wang"
strlen key 返回字符串长度,注意utf-8下一个中文三个字节
getset key value 获取到key原来的值返回,并给它赋新值value
setrange key offset value 将key对应 值,从offset 位置开始用value覆盖
127.0.0.1:6379> getset name1 xxxx
"lina"
127.0.0.1:6379> getrange name1 1 -1
"xxx"
127.0.0.1:6379> setrange name1 1 99999
(integer) 6
127.0.0.1:6379> get name1
"x99999"
decr key 自减
append key value 在后面追加
127.0.0.1:6379> set name anny
OK
127.0.0.1:6379> setbit name 6 1
(integer) 0
127.0.0.1:6379> get name
"cnny"
当然你还可以不用管key 对应的值是什么随便设置
127.0.0.1:6379> setbit name 1997 1
(integer) 0
127.0.0.1:6379> get name
"cnny\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
......................................................
0\x00\x00\x00\x00\x00\x00\x04"
127.0.0.1:6379> bitcount name 0 -1
(integer) 20
127.0.0.1:6379> bitcount name
(integer) 20
127.0.0.1:6379> getbit name 6
(integer) 1
应用场景:假设你要维护数亿条登录状态数据,如腾讯QQ,微信什么的,如果是在mysql中,我们就需要增加一个字段login_status,存登录状态,但是数以亿计的就会导致耗费巨量存储空间,及查询速度
但是我们使用redis 的这个功能, setbit gitbit bitcount
我们只需要0表示未登录,1表示登录
那么一亿人的数据会占据多大空间呢?8x1024x1024x12 = 100663296 一亿多十万。 也就12M的空间
当第1717个人登录时:我们只需
setbit login_status 1717 1
当他注销时:
setbit login_status 1717 0
查看第437 个人是否是登录状态
getbit login_status 437
统计当前有多少人在线
bitcount login_status 0 -1
127.0.0.1:6379> setbit login_status 1717 1
(integer) 0
127.0.0.1:6379> setbit login_status 437 1
(integer) 0
127.0.0.1:6379> getbit login_status 437
(integer) 1
127.0.0.1:6379> bitcount login_status
(integer) 4
redis 的使用,及如何使用redis维护数亿人的登录状态
标签:格式 登录 二进制 pre cond 位置 fse xxx 通过
原文地址:https://www.cnblogs.com/shiqi17/p/9570718.html