一.简介
1. Redis的数据存放在内存中(好处:速度快;减少计算的时间;减轻数据库压力)
2.相比HashMap/Memcached,其有更丰富的数据类型;支持多种编程语言;功能丰富:持久化机制、内存淘汰策略、事务、发布订阅;支持集群、分布式
3.默认有16个库(0~15).可在配置文件中修改(databases 16);因为没有完全隔离,不像数据库,不适合把不同的库分配给不同的业务使用。默认使用第一个db0.在及群里面只能使用第一个db
二.基本操作
1.数据库、键相关
select 0 —— 切换数据库
flushdb ——清空当前数据库
flushall ——清空所有数据库
keys * ——查看所有键
dbsize ——获取键总数
exists 键名 ——查看键是否存在
rename 原键名 新键名 ——重命名键
type 键名 —— 查看类型
2.String字符串(存储 int(整数)、float(浮点数) 、 String(字符串))
getrange key 0 1 //获取指定范围内的字符
strlen key //获取值长度
append key value //追加内容
mset key1 value1 key2 value2 //设置多个值
mget key1 key2 //获取多个值
SET key value EX/PX 60 NX/XX //EX-过期时间以秒为单位; PX-设置过期时间以毫秒为单位;;NX-仅在键不存在时设置键;XX - 只有在键已存在时才设置。
incr key //整数值递增(值不存在会得到1)
incrby key 100 //增加100
incrbyfloat key 2.3 //浮点数增加
decr key //整数值递增
decrby key 100 //整数值减100
3.Hash 哈希(存储多个无序的键值对)
hset key field value //添加
hmset key field1 value1 fie;d2 value2 //批量添加
hget key field //获取
hmget key field1 fie;d2 //批量获取
hvals key //获取key下所有的filed
hgetall //返回所有的filed 和value
hdel key field1 field2 //删除filed
hlen key //长度
注意事项:
1.field 不能单独设置过期时间
2.需要考虑数据量分布的问题(所有相关值聚集到一个key,节约了内存空间,减少了key冲突,但field非常多的时候,也存在无法分布到多个节点的问题)
4.List列表(存储有序的字符串(从左到右),元素可以重复)
lpush queue v1 v2 //从列表头部插入值
rpush queue v1 v2 //从列表尾部插入值
lpop queue //移除并返回列表的第一个元素
rpop queue //移除并返回列表的最后一个元素
lindex queue 0 //通过索引获取列表中的元素。-1 表示列表的最后一个元素, -2表示列表的倒数第二个元素;0 2 表返回0~2的元素
5.Set 集合(存储String类型的无序集合)
sadd myset abcdefg //添加一个或者多个元素
smembers myset //获取所有元素
scard myset //统计元素个数
srandmember myset //随机获取一个元素
spop myset //随机弹出一个元素
srem myset d e f //移除一个或者多个元素
sismember myset a //查看元素是否存在
6.ZSet 有序集合(sorted set存储有序的元素。每个元素有个score,按照score从小到大排名。score相同时,按照key的ASCII码排序)
zadd myzset 10 java 20 php 30 ruby //添加元素
zrange/zrevrange myzset 0-1 withscores //获取全部元素
zrangebyscore myzset 20 30 //根据分值区间获取元素
zrem myzset php cpp //移除元素 也可以根据 score rank 删除
zcard myzset //统计元素个数
zincrby myzset 5 python //分值递增
zcount myzset 20 60 //根据分值统计个数
zrank myzset python //获取元素 rank
zscore myzset python //获取元素 score
7.list、set、zset 对比
数据结构 | 是否允许重复元素 | 是否有序 | 有序实现方式 |
列表list | 是 | 是 | 索引下标 |
集合set | 否 | 否 | 无 |
有序集合zset | 否 | 是 | 分值 score |
三.应用场景
- 缓存-提升热点数据的访问速度
- 共享数据-数据的存储和共享的问题
- 全局ID分布式全局ID的生成方案(分库分表)
- 分布式锁-进程间共享数据的原子操作保证
- 在线用户统计和计数
- 队列、栈-跨进程的队列/栈
- 消息队列-异步解耦的消息机制
- 服务注册与发现-RPC通信机制的服务协调中心(Dubbo 支持 Redis)
- 购物车
- 新浪/Twitter 用户消息时间线
- 抽奖逻辑(礼物、转发)
- 点赞、签到、打卡
- 商品标签
- 用户(商品)关注(推荐)模型
- 电商产品筛选
- 排行榜