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多个地区,会产生数量庞大的榜单,或者数量更加庞大的朋友圈点赞列表,就需要慎重地考虑容量的问题了。