Redis---学习笔记(更新中)
一.基本命令
#查看所有键 keys * #查看指定键 keys key #查看模糊键 keys ke* keys ke? keys ke[a-z] keys ke\? #判断键是否存在 exists key #查看键类型 type key #清空所有 flushall
二.数据类型相关命令
1.字符串:key尽量用【对象类型:属性:值】的规则命名
# 增/改 set key mset k1 k2 k3 # 删 del key del k1 k2 k3 # 查 get key mget k1 k2 k3 # 统计 strlen key # 加1 incr key # 加n incr key n # 增加内容(key不存在会创建) append key xxx
2.散列:由键 字段 值 组成
# 增:把一条用户信息保存为散列数据 hset user name Tom hset user age 20 # 改:名字存错了,重新存 hset user name Haha # 查:查看结果 hget user name # 检查name字段是否存在:如果user中没有name,上一步会报错 hexists usr name # 忘记user中还有哪些字段? hkeys user hvals user # 删掉user中的age hdel user age # 删掉整个user del user # 在加一条数据,但是之前的增加数据太麻烦了? hmset user name tom age 20 # 查看数据 hmget user name age # 上面的查看数据还是太麻烦? hgetall user # 年纪加10岁 hincrby user age 10
3.列表:双向链表,适合快进快出
# 增 lpush number 1 2 3 4 5 # 查 lrange number 0 -1 #从第一个索引查询到最后一个索引 lindex number 0 # 查询指定索引的值 # 改 lset number 0 9 # 把列表中的索引为0的值改成9 linsert number before 9 111 # 在9的前面插入111 linsert number after 9 222 # 在9的后面插入222 # 删 lpop number rpop number lrem number count value ltrim number0 9 # 把source列表的最后一个元素添加到dest列表的左边 rpoplpush source dest # 统计 llen number
4.集合
# 增/改 sadd myset h j k # 查 smembers myset # 删 spop myset del myset # 统计 scard myset # 随机取一个 srandmenber myset # 交集 sinter set1 set2 # 并集 sunion set1 set2 # 差集 sdiff set1 set2 sdiffstore storeset set1 set2
5.有序集合
# 增/改 zadd userscore 100 h1 200 h2 50 h3 30 h4 70 h5 zadd userscore 120 h6 # 查 zrange userscore 0 -1 zscore userscore h1 zrange userscore 0 3 # 按照分数从小到大排序返回索引 0-3 中的元素 zrange userscore 0 3 withscores zrangebyscore userscore 10 50 # 按照分数从小到大排序返回分数为 10-50 中的元素 zrangebyscore userscore 10 50 withscores zrangebyscore userscore 10 50 withscores limit 1 3 zrevrange # 用于倒序 zrevrangebyscore # 用于倒序 # 删 zrem userscore h1 h2 zremrangebyrank userscore 1 2 # 删除排名1到2的元素 #统计 zcard userscore zcount userscore 10 20 统计指定范围分数内的元素个数 #加减分 zincrby usrscore -50 h1
三.事务
multi ... exec
四.生存时间
# 只有set操作会影响生存时间 # 设置过期时间 set name tom expire name 10 expireat name 时间戳 # 剩余过期时间 ttl name # 毫秒级 pexpire name 3000 pexpireat name 毫秒时间戳
如何限制redis的最大内存使用和删除策略
五.排序
sort命令
六.消息通知
1.队列:
好处:松耦合,易扩展
实现:
# 伪代码 lpush tasks t1 loop task = rpop tasks if task exec task else wait 1 second
优先级实现:
/**
* 伪代码 * brpop 是一个会阻塞的命令,可以接受多个键 最后一个参数表示超时时间,0则不超时 * 如果三个任务键都没有数据,程序会一直阻塞,一旦其中有一个键有数据,程序就会执行,此特性可以实现优先级。那个任务要优先执行,就推送一下,程序就会立刻执行那个任务 */ lpush one_tasks t1 lpush two_tasks t2 lpush three_tasks t3 loop task = brpop one_tasks two_tasks three_tasks 0 exec task
2.发布/订阅:
# redis实例---发布 publish channel.a hihihi #redis实例---订阅 subscribe channel.a
七.管道
八.管理(持久化 主从 管理工具 安全)