sxd-redis-1
2021-07-15 10:04:48 0 举报
登录查看完整内容
redis基础数据结构及用法
作者其他创作
大纲/内容
sADD key member [member ...] 添加(去重) sadd k1 a b c d a -> a b c dSMEMBERS key 列出所有的数据SREM key member [member ...] 删除 sadd k1 a b c d a sadd k2 c d e f g交集 SINTER k1 k2. -> c dSINTERSTORE destination key [key ...] -- 直接存储到目标keySINTER destination key [key ...]. --直接返回并集 SUNION k1 k2 --> a ...gSUNION destination key [key ...]SUNIONSTORE destination key [key ...]差集 SDIFF k1 k2 --> a b k1不在k2里面的值SDIFF k2 k1 --> e f gSDIFF key [key ...] 随机数量 SRANDMEMBER key 【count】整数:取出一个去重的重复集负数:取出一个不去重的重复集,并且满足传入的数量(count)取出一个 SPOP key [count]
dbfilename dump.rdbdir /usr/local/var/db/redis/ 定dump文件目录及文件aof 默认是关闭appendonly no 改成yes appendfilename \"appendonly.aof\
PUBLISH channel message 发布消息 Post a message to a channel (publish channela hello)SUBSCRIBE channel [channel ...] 订阅消息 summary: Listen for messages published to the given channels (subscribe channelA channelB)PSUBSCRIBE pattern [pattern ...] 模糊匹配订阅 summary: Listen for messages published to channels matching the given patterns (PSUBSCRIBE news.* )UNSUBSCRIBE [channel [channel ...]] 取消订阅 summary: Stop listening for messages posted to the given channels (UNSUBSCRIBE channel)PUNSUBSCRIBE [pattern [pattern ...]] 批量取消订阅 summary: Stop listening for messages posted to channels matching the given patterns (PUNSUBSCRIBE news.*)
基本操作
主动+被动的方式
bitop add 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ....1
incrincrbydecrdecrby
rpop key
如何淘汰过期key
时点性
如果多个事物同时开启,则谁先执行exec 谁先执行
【后面内存回收】
8b
SET key value [expiration EX seconds|PX milliseconds] [NX|XX] eg: set k1 abc ex 10
client2
持久化
bitop op(and or not xor )eg bitop and targetkey 20190101 20190102eg bitop or targetkey 20190101 20190102eg bitop not targetkey 20190101 20190102
RDB
0
hash
redis(写数据)
引用 ref = 2
10d
value
b4
BGREWRITEAOF
setbit 20190102 2 1setbit 20190102 3 1setbit 20190102 6 1setbit 20190102 7 1
encoding
物理内存
127.0.0.1:6379> WATCH k1OK127.0.0.1:6379> MULTIOK127.0.0.1:6379> get k1QUEUED127.0.0.1:6379> INCR k1QUEUED127.0.0.1:6379> EXEC1) \"abc\"
数组
bitcount key [start] [end]eg bitcount peter 0 0 只捞出第二个 值为2eg bitcount peter 1 1 只捞出第二个 值为4eg bitcount peter 0 n 捞出来全部
内核
类似于平衡二叉树
peter 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 ... 1sean. 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 1 0 .. 1
队列反向命令
lfu 碰了多少次
linsert key after|before pivot value
1
配置文件中给出bgsave的规则;save规则
lpop key
client1
redis
bitmap
通过镜像+增量
弊端:aof无限大,恢复慢
明确关机维护
redis:6379
管道:1. 衔接 前一个命令的输入 作为后一个命令的输入2. 管道会触发子进程 ,每次创建的管道子进程id都不一样 $$ $BASHPIDecho $$ | more 打出父进程idecho $BASHPID | more. 打出子进程id$$ 高于管道 父进程的数据,子进程看不到 ----数据隔离使用export 子进程后就可以看到了子进程修改,只是改子进程的东西,不会动父进程的数据如果父进程修改,子进程的也不会被改掉
AOF
优化
redis 写操作记录到文件中
blpop key timeout
点赞、秒杀、评论、对数据库的事物操作的规避
127.0.0.1:6379> MULTIOK127.0.0.1:6379> set k1 1QUEUED127.0.0.1:6379> get k1QUEUED127.0.0.1:6379> incr k1QUEUED127.0.0.1:6379> get k2QUEUED127.0.0.1:6379> DEL k1QUEUED127.0.0.1:6379> EXEC
type:value
getsetappendgetrangesetrangestrlen
连接1连接2连接3连接4非阻塞连接
List
redis 使用及数据结构
sorted set
save
a3
epoll
速度:快空间:小
setbit (setbit key offset value(只有0 和1))bitcount (bitcount key [start] [end]字符的索引(每8个offset是1个字符),并非偏移量)bipos (位的索引,并非偏移量)bitop (与、或、飞)
....16(database)
改变
hset key field value 设置单值。 hset sean nam sean hget key field 取值 hget sean name --> seanhmset key fied value field value ... 设置多值。 hset sean nam sean age 18 address bjhmget key field field fied. 取多个field值 hmget sean age name --> 18 seanhkeys key 取多个field hkeys sean --> age name addresshvals key 取多个值 hvals sean --> 18 sean bjhgetall key 取所有值 hgetall sean --> age 18 name sean address bjhincrby key field [value] 递增 hincrby sean age [2]hincrbyfloat key field [value] 递增 hincrbyfloat sean age [2]HDEL key field [field ...] 删除fieldHEXISTS key field 判断是否存在HLEN key 查询field的个数HSETNX key field value. HSETNX sean sex 男 设置不存在的值
b5
127.0.0.1:6379> MULTIOK127.0.0.1:6379> get k1QUEUED127.0.0.1:6379> set k2 bbQUEUED127.0.0.1:6379> EXEC1) (nil)2) OK
(printf \"PING\\PING\\PING\\\"; sleep 1) | nc localhost 6379echo -e \"set k1 1 \ incr k1\" | nc localhost 6379 (redis会执行这2条命令)
磁盘
setbit peter 1 1setbit peter 2 1setbit peter 7 1setbit peter 8 1........setbit peter 100 1
key过期
抽奖
lpush key value .....
bgsave
... n
fork 创建子进程
redis pipline
fork()系统调用
redis 进阶使用
回收策略(maxmemory配置指令用于配置Redis存储数据时指定限制的内存大小)
kernel
阻塞、单播队列 fifo
set
noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
牺牲一定的空间换时间
数值
client
redis pub/sub
20190101 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 ... 120190102. 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 .. 1
redis 事物
正负索引
client4
lru 多久没碰了
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..........100
bitop. or 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 ....1
multi 开启事物写入操作的命令 放到队列里exec 执行放到队列里的命令
linux
单线程
setbit 20190101 1 1setbit 20190101 2 1setbit 20190101 7 1setbit 20190101 8 1
redis:6380
key
发送命令1发送命令2发送命令3发送命令4阻塞执行命令,一条一条执行
如果同时开,则用aof 恢复,4.0后aof包含rdb,增加记录新增的写操作
redis.cn 中文网站redis 链接方式1. ./redis-cli 2. nc localhost 6379
duandian@MacBook-Pro-2 ~ num=1 duandian@MacBook-Pro-2 ~ echo $num1 duandian@MacBook-Pro-2 ~ /bin/bashbash-3.2$ echo $numbash-3.2$ exitexit duandian@MacBook-Pro-2 ~ export num duandian@MacBook-Pro-2 ~ /bin/bashbash-3.2$ echo $num1bash-3.2$ num=88bash-3.2$ echo $num88bash-3.2$ exitexit duandian@MacBook-Pro-2 ~ echo $num1
StringByte
rdb和aof 可以同时开启
日志
弊端:不支持拉链(只有一个dump.db)容易丢失数据
主动访问key发现过期则删除
只能收到订阅后发布的消息
字符串
set k1 99
物理内存从小到大,不随命令变化.排序实现,增删改查速度
setbit sean 2 1setbit sean 4 1setbit sean 5 1........setbit sean 100 1
list 可重复,有序(插入顺序)
二进制安全编解码依赖外部value 是字节流
9a
被动:具体就是Redis每秒10次做的事情:1测试随机的20个keys进行相关过期检测。2删除所有已经过期的keys。3如果有多于25%的keys过期,重复步奏1
执行多条命令echo -e \"sfdsa\dfda\" (\是换行符)redis 执行多条命令echo -e \"set k1 1 \ incr k1\" | nc localhost 6379 (redis 会执行2条命令)
skip list跳跃表
类型是否能参与计算规避异常
client3
set 无序、去重
copy on write 内核机制创建子进程并不发生复制创建进程变快了根据经验,不可能子进程把所有数据都改一遍,玩的是指针
栈同向命令
redis事物,提交后继续执行如下命令,
lrem key count value
0 条评论
回复 删除
下一页