redis 启动
官网下载redis后,解压,再打开cmd
cd D:\Program Files\redis #切换到redis的目录下 redis-server.exe redis.windows.conf #启动redis服务
这时候另启一个 cmd 窗口
切换到 redis 目录下运行如下命令,即可连接到redis服务端,可以输入命令进行set/get等操作。
redis-cli.exe -h 127.0.0.1 -p 6379
redis有16个数据库,默认是第0个数据库。通过select 3 切换到第3个数据库
dbsize # keys * #查看数据库所有的key flushdb #清空当前库的内容 flushall # 清空全部数据库的内容 exists key #key是否存在 expire key 毫秒数 # 设置key的过期时间 ttl key #查看key还有多久过期 type key #查看key的类型
String
数据结构为简单动态字符串。是可以修改的字符串,内部结构实现类似java的ArrayList,
采用预分配冗余空间的方式来减少内存的频繁分配。
基本命令
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
ex:设置key在多少秒过期
px:设置key在多少毫秒过期
nx:相当于setnx,当key不存在才设置
xx:当key存在时,覆盖
append key value #往key的值上追加内容 incr key # ++key 浏览量、点赞数 decr key # --key 取消点赞,点赞数减一 incrby key num # key+=num decrby key num #key -= num
setrange key offset value #从offset的位置开始替换 getrange key start end #截取key的 start-end 的字符,start 从0开始
setex (set with expire) #设置过期时间 setex key seconds value setnx (set if not exist) #不存在就设置,在分布式锁中经常使用 setnx key value
mset #设置多个k v mget #获取多个k msetnx #操作是原子性的,案例中,k1已经存在,故k4也没有set进去。
应用场景:
阅读数:只要点击rest地址,直接使用incr key 命令自增1.
商品编号、定单号采用incr命令生成
Hash
对应java: map<String,Map<Object,Object>>
List
单键多值
Redis列表是简单的字符串列表,按照插入的顺序排序。可以添加元素到列表的头部(左边)
或者尾部(右边)
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标操作中间节点性能会较差。
队列、栈
允许重复
lpush key vlaue #头部插入数据 rpush key value #尾部插入数据 lrange key start end #返回 start-end的数据 lpop key #弹出头部数据 rpop key #弹出尾部数据
ltrim list start end # list = substr[start,end]
应用场景:
微信订阅
Set
集合 无序不重复
应用:
1、抽奖小程序
2、朋友圈点赞列表
3、共同关注的人
共同爱好
QQ内推可能认识的人
Zset
对于排行榜和最新列表两种应用场景,list类型能做到的sorted set类型都能做到,list类型做不到的sorted set类型也能做到,那为什么还要使用list类型去实现排行榜或最新列表呢,直接用sorted set类型不是更好吗?原因是sorted set类型占用的内存容量是list类型的数倍之多(之后会在容量章节详细介绍),对于列表数量不多的情况,可以用sorted set类型来实现,比如上文中举例的打擂金曲排行榜,每天全国只有一份,两种数据类型的内存容量差距可以忽略不计,但是如果要实现某首歌曲的翻唱作品地区排行榜,数百万的歌曲,300多个地区,会产生数量庞大的榜单,或者数量更加庞大的朋友圈点赞列表,就需要慎重地考虑容量的问题了。