1,Redis数据结构:
2,Redis命令---Redis通用命令(常见的有,keys,del,exists,expire,ttl)
2.1,keys : 查看符合模板的所有key,不建议在生产环境设备上使用
打开redis:win+R ,输入cmd,打开命令提示符后,输入 redis-server;
再另外打开一个命令提示符,输入 redis-cli,就能成功打开redis数据库了。
通过 help [command] 可以查看一个命令的具体用法
官网也可以查看到 keys 命令的例子
2.2,del : 删除一个指定的key,也可以删多个
删多个key
2.3,exists : 判断 key 是否存在
2.4,expire : 给一个key 设置有效期,有效期到期时该key会被自动删除 (比如验证码,体验卡),还有 ttl : 查看一个key的剩余有效期
当剩余有效期是 -2时,就表示这个key在库里已经删除了,如果没有设置有效期,一个key 的有效期是 -1。表示永久有效
3,Redis命令---String类型(set,get,mset,mget,incr,incrby,incrbyfloat,setnx,setex)
3.1,set,get,mset,mget
set:添加或者修改已经存在的一个String类型的键值对
get:根据key获取String类型的value
mset :批量添加多个String类型的value
mget:根据多个key获取多个String类型的value
3.2,incr,incrby,incrbyfloat
incr:让一个整型的key自增1
incrby:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2。(自减的话,就输个负数)
incrbyfloat:让一个浮点类型的数字自增并指定步长
3.3,setnx,setex
setnx:添加一个String类型的键值对,前提是这个key不存在,否则不执行
nx 写在后面和 setnx一样。(下图是redis和python交互时,set函数的原型)
setex:添加一个String类型的键值对,并且指定有效期,注意和expire的区别
ex 也可以写在后面
4,Redis命令---key的层级格式
在 rdm 图形化客户端里也能看出层级关系
5,redis命令---hash类型(hset,hget,hmset,hmget,hkeys,hvals,hincrby,hsetnx)
5.1,hset key field value:添加或者修改hash类型key的field的值
例子:
在rdm里可以看到结果
也可以修改field 的值
5.2,hget key field:获取一个hash类型key的field的值
5.3,hmset:批量添加多个hash类型key的field的值
5.4,hmget:批量获取多个hash类型key的field的值
5.5,hgetall:获取一个hash类型的key中的所有的field和value
5.6,hkeys:获取一个hash类型的key中的所有的field;hvals:获取一个hash类型的key中所有的field
5.7,hincrby:让一个hash类型key的字段值自增并指定步长
5.8,hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
6,Redis命令---List类型(lpush,lpop,rpush,rpop,lrange,blpop,brpop)
6.1,lpush key element....:向列表左侧插入一个或多个元素;
6.2,rpush key element...:向列表右侧插入一个或多个元素
6.3,lpop key:移除并返回列表左侧的第一个元素,没有则返回nil
6.4,rpop key:移除并返回列表右侧的第一个元素
6.5,lrange key star end:返回一段角标范围内的所有元素(下标从0开始)
6.6,blpop和brpop:与lpop和rpop类似,只不过在没有元素时等待指定时间(阻塞),而不是直接返回nil
先在命令行提示符窗口输入blpop users2 100,先阻塞100秒
再打开另一个 redis-cli 窗口,在users2左侧插入一个值,
然后在第一个窗口里就能看到结果
7,Redis命令---Set类型(sadd,srem,scard,sismember,smembers,sinter,sdiff,sunion)
7.1,sadd key member...:向set中添加一个或多个元素
7.2,smembers:获取set中所有元素
7.3,sem key member...:移除set中指定元素1
7.4,sismember key member:判断一个元素是否存在于set中
7.5,scard key:返回set中元素的个数
7.6,sinter key1 key2...:求key1与key2的交集;sdiff key1 key2...:求key1与key2的差集;sunion key1 key2...:求key1和key2的并集(这些也会在下面的练习中用到)。
7.7,Set命令的练习
7.7.1,先创建张三和李四的集合并把好友添加进去
7.7.2,计算张三的好友有几人?(用scard求个数,目录可以导航)
7.7.3,计算张三和李四有哪些共同好友?(用sinter求交集)
7.7.4,查询哪些人时张三的好友却不是李四的好友?(用sdiff求差集)
7.7.5,查询张三和李四的好友总共有哪些人?(用sunion求并集)
7.7.6,判断李四是否是张三的好友?(用sismember 判断一个元素是否在集合中存在)
7.7.7,判断张三是否是李四的好友?
7.7.8,将李四从张三的好友列表中移除(用srem删除)
用smembers查看张三的好友,已经没有李四了
8,Redis命令---SortedSet命令
8.1,SortedSet命令练习
8.1.1,先添加学生得分(用zadd添加)
zadd key score member:添加一个或多个元素到sorted set,如果已经存在则更新其score值
打开客户端,会发现分数score默认是升序的,从小到大(第一个是最小的分数)
8.1.2,删除Tom同学(用zrem删除)
zrem key member:删除sorted set中的一个指定元素
打开客户端,发现Tom没了
8.1.3,获取Rose同学的排名(用zrevrank)
zrank key member:获取sorted set 中指定元素的排名(本题是根据分数高低,从分数高的开始排,就是从大到小排,但是sorted set默认是从小到大排,所以要用到zrevrank,倒序)
注意:所有排名默认都是升序,如果要降序则在命令的 z 后面添加 rev 即可
先试一下用zrank从小到大的排
打开客户端,发现Rose排在3号,下标从0开始
再用zrevrank试一下现实意义的排名
8.1.4,查询80分以下(不包含80)有几个学生?(用zcount)
zcard key:获取sorted set中的元素个数
zcount key min max:统计score值在给定范围内的所有元素的个数
打开客户端,发现有2个在80分以下
8.1.5,给Amy同学加2分(用zincrby自增)
zincrby key increment member:让sorted set中的指定元素自增,步长为指定的increment值
8.1.6,获取Amy同学的分数(用zscore)
zscore key member:获取sorted set中的指定元素的score值
8.1.7,查出成绩前3名的同学(用zrevrange)
zrange key min max:按照score排序后,获取指定排名范围内的元素
先试一下用 zrange 从小到大的排,就是把成绩后3名的同学(红方框)查出来了
用zrevrange 查出成绩前3名的(蓝方框)
8.1.8,查出成绩80分以下(不包含80)的所有同学(用zrangebyscore)
zrangebyscore key min max:按照score排序后,获取指定score范围内的元素