高性能键值对数据库,支持的键值数据类型
- 字符串类型
- 列表类型
- 有序集合类型
- 散列类型
- 集合类型
Redis应用场景
- 缓存
- 任务队列
- 网站访问统计
- 数据过期处理
- 应用排行榜
- 分布式集群架构中的session分离
Redis的数据结构
- 字符串(String)
- 哈希(hash)
- 字符串列表(list)
- 字符串集合(set)
- 有序字符串集合(sortes set)
Key定义的注意点
- 不要太长(不超过1024字节)
- 不要太短(可读性差)
存储String
- 二进制安全的,存入和获取的数据相同
- Value最多可以容纳的数据长度是512M
存储String常用命令
- 赋值
- 取值
- 删除
- 数值增减
- 扩展命令
set
设置值:set key value
get
取值:get key
del
删除:del key
getset
先取值后替换值:getset oldValue newValue
incr
自增一:incr key(若key不存在则新建0值)
decr
自减一:decr key(若key不存在则新建0值)
incrby
增加指定数值:incrby key num(若key不存在则新建0值)
decrby
减少指定数值:decrby key num(若key不存在则新建0值)
append
追加字符串:append key str(不存在则新建空串)
keys *
查看当前所有键
存储Hash
- String Key和String Value的map容器
- 每一个Hash可以存储4294967295个键值对
存储Hash常用命令
- 赋值
- 取值
- 删除
- 增加数字
- 自学命令
hset
赋值:hset myhash username jack(一次只能存一个键值对)
hmset
赋值:hmset myhash username jack age 21(一次存放多个键值对)
hget
取值:hget myhash username(一次只能取一个键值对的值)
hmget
取值:hmget myhash username age(一次能取多个键值对的值)
hgetall
取值:hgetall myhash(一次将集合中的所有键值对都取出来)
hdel
删除:hdel myhash username age
del
删除:del myhash(删除整个集合)
hincrby
增加数字:hincrby myhash age 5
hexists
判断属性是否存在:hexists myhash username(存在返回1,不存在返回0)
hlen
键值对的数量:hlen myhash
hkeys
所有的键:hkeys myhash
hvals
所有的值:hvals myhash
存储list
- ArrayList使用数组方式
- LinkedList使用双向链接方式
- 双向链表中增加数据
- 双向链表中删除数据
存储list常用命令
- 两端添加
- 查看列表
- 两端弹出
- 获取列表元素个数
- 扩展命令
lpush
从左端插入:lpush mylist 1 2 3
rpush
从右端插入:rpush mylist a b c
lrange
查看所有元素:lrange mylist 0 -1
lpop
弹出最左端的元素:lpop mylist
rpop
弹出最右端的元素:rpop mylist
llen
列表中的元素个数:llen mylist
lpushx
仅当list存在时才在左端插入,否则不插入:lpushx mylist x
rpushx
仅当list存在时才在左端插入,否则不插入:rpushx mylist x
lrem
删除x个y:lrem mylist x y(若x>0,则从左往右删除x个;若x小于0,则从右往左删除-x个;若x=0,则删除所有等于y的值)
lset
修改值:lset mylist 3 mmm(将下标为3的元素设置为mmm)
linsert
linsert mylist before x yy(在x的左边插入yy)
linsert mylist after x yy(在x的右边插入yy)
rpoplpush
rpoplpush list1 list2(将list1的右边弹出插入到list2的左边)
rpoplpush使用场景
存储Set
- 和List类型不同的是,Set集合中不允许出现重复的元素。
- Set课包含的最大元素数量是4294967295。
存储set常用命令
- 添加/删除元素
- 获得集合中的元素
- 集合中的差集运算
- 集合中的交集运算
- 集合中的并集运算
- 扩展命令
sadd
添加元素:sadd myset 1 2 3
srem
删除元素:srem myset 1 2
smembers
查看所有元素:smembers myset
sismember
是否在集合中:sismember myset a(在集合中返回1,不在集合中返回0)
sdiff
差集运算:sdiff mya1 myb1(mya1-myb1)
sinter
交集运算:sinter mya1 myb1(mya1∩myb1)
sonion
并集运算:sonion mya1 myb1(mya1∪myb1)
scard
集合中元素个数:scard myset
srandmember
随机返回一个元素:srandmember myset
sdiffstore
sdiffstore my1 mya1 myb1(将mya1和myb1的差存到my1)
sinterstore
sinterstore my1 mya1 myb1(将mya1和myb1的交集存到my1)
sunionstore
sunionstore my1 mya1 myb1(将mya1和myb1的并集存到my1)
存储Set使用场景
- 跟踪一些唯一性数据
- 用于维护数据对象之间的关联关系
存储Sorted-Set
- Sorted-Set和Set的区别
- Sorted-Set中的成员在集合中的位置是有序的
存储Sorted-set常用命令
- 添加元素
- 获得元素
- 删除元素
- 范围查询
- 扩展命令
zadd
添加元素:zadd mysort 70 zs 80 ls(相同的会用新分数覆盖)
zscore
查询分数:zscore mysort zs
zcard
查询元素个数:zcard mysort
zrem
删除元素:zrem mysort tom ww
zrange
查询所有元素:zrange mysort 0 -1 (withscores)显示所有元素,并从小到大排列,withscores为显示分数。
zrevrange
查询所有元素:zrevrange mysort 0 -1 (withscores)显示所有元素,并从大到小排列。
zrangebyscore
按分数范围显示:zrangebyscore mysort 80 100 limit 0 2(只显示其中的两个)
zremrangebyrank
按排名范围删除元素:zremrangebyrank mysort 0 4
zremrangebyscore
按分数范围删除元素:zremrangebyscore mysort 80 100
zincrby
给指定元素增加分数:zincrby mysort 3 zs
zcount
统计分数范围的元素个数:zcount mysort 80 90
Sorted-Set使用场景
- 如大型在线游戏积分排行榜
- 构建索引数据
Redis的Keys的通用操作
查找所有的Key
keys *
查找特定前缀的Key
keys my?
删除key
del key1 key2 key3
判断key是否存在
exists key(存在返回1,不存在返回0)
重命名key
rename oldname newname
设置过期时间(单位:秒)
expire key 1000
查看key所剩时间
ttl key(若未设置过期时间,则返回-1)
获得指定key的类型
type key