Redis介绍
Redis(Remote Dictionary Server ),即远程字典服务 !
单线程,瓶颈不是CPU,是内存和网络带宽,每秒读取11万次,写8万次,默认16个数据库。
五大基本类型
String、List、Set、Hash、Zset
String(字符串)
1、常用命令
set key value #设置值
get key #获取值
keys * #获取所有key
exists key #判断key是否存在
append key "hello world" #追加,key不存在时=set key
strlen key #获取长度
incr key #自增1,key必须为数值
incrby key 10 #指定增量
decr key #自减1
decrby key 10 #指定减量
getrange key 0 2 #截取字符串[0,2]
getrange key 0 -1 #获取值=get key
set key "hello world" #替换
setrange key 1 "666" #指定位置替换
setex key 30 "hello" #设置key值为hello,30秒后过期
setnx key "world" #key不存在创建key
mset k1 v1 k2 v2 k3 v3 #同时设置多个kv
mget key #同时获取多个v
msetnx k1 v1 k2 v2 #同时成功或同时失败(原子性操作)
getset key "redis" #不存在返回nil,并设置值;存在替换,并返回替换前的值
2、应用场景
计数器、统计多单位的数量、粉丝数、对象缓存存储
List(列表)
1、常用命令
lpush list one two three #添加(左)
rpush list one two three #添加(右)
lrange list 0 -1 #获取list中全部
lrange list 0 1 #获取指定区间值
lpop list #移除list第一个
rpop list #移除list最后一个
lindex list 1 #通过下表获取list中的值
llen list #list的长度
lrem list 1 one #移除list中指定个数的value
ltrim list "hello" 1 2 #通过下标截取,改变list
rpoplpush list1 list2 #list1移除最后一个,添加到list2中
exists list #判断list是否存在
lset list 0 item #替换指定位置的元素,不存在报错
linsert list after hello world #hello后添加world元素
2、应用场景
消息排队、消息队列(lpush rpop)、栈(lpush lpop)
Set(集合,不重复)
1、常用命令
sadd set hello #set集合添加元素
smembers set #查看set全部元素
sismember set world #判断set中是否包含该元素
scard set #查看元素个数
srem set hello #移除hello
srandmember set #随机抽选一个元素
srandmember set 2 #随机抽选指定个数的元素
spop set #随机删除元素
smove set1 set2 hello #将set1中的hello移动到set2中
sdiff set1 set2 #差集
sinter set1 set2 #交集(共同好友)
sunion set1 set2 #并集
2、应用场景
共同关注、推荐好友
Hash(哈希)
1、常用命令
hset hash key value #添加一个kv
hget hash key #根据key获取value
hmset hash k1 v1 k2 v2 k3 v3 #添加多个kv
hmget hash k1 k2 k3 #获取多个value
hgetall hash #获取全部kv
hdel hash k1 #删除指定kv
hlen hash #获取kv的个数
hexists hash k1 #判断k1是否存在
hkeys hash #获取所有key
hvals hash #获取全部value
hincrby hash key 1 #指定增量
hsetnx hash k1 v1 #k1不存在时即可添加
2、应用场景
适合存入用户信息等,经常变动的信息。
Zset(有序集合)
1、常用命令
zadd zset 1 one #添加一个
zadd zset 2 two 3 three #添加多个
zrange zset 0 -1 #小->大排序(只显示用户)
zrevrange zset 0 -1 #大->小排序(只显示用户)
zrangebyscore zset -inf +inf withscores #显示用户和成绩
zrangebyscore zset -inf 2500 withscores #显示低于2500的用户个成绩
zrem zset one #移除指定元素
zcard zset #获取元素个数
zcount zset 1 3 #获取指定区间用户数量
2、应用场景
成绩表、工资表、排行榜
三种特殊类型
Geospatial、Hyperloglog、Bitmap
Geospatial(地理位置,底层是Zset)
1、常用命令
geoadd china 116.40 39.90 beijing #添加地理位置(多个)
geopos china beijing #获取指定城市的经纬度(多个)
geodist china beijing shanghai km #北京到上海的直线距离
georadius china 110 30 300 km #以110,30这个经纬度为中心,300km为半径,获取城市名称
georadius china 110 30 300 km withdist #获取到中间位置的距离和城市名称
georadius china 110 30 300 km withcoord #获取城市名称和经纬度信息
georadius china 110 30 300 km withdist withcoord count 1 #筛选出指定城市名称、距离、经纬度
georadiusbymember china beijing 300 km #获取距离北京300km的城市
geohash china beijing shenzhen #将二维的经纬度转换成字符串,两个字符串越接近,城市距离越近
2、应用场景
定位,附近的人,两地距离
Hyperloglog(基数统计的算法,只需要12KB内存,0.81% 错误率)
1、常用命令
pfadd key1 a b c d e #创建一组元素
pfcount key1 #统计key基数数量
pfmerge key3 key1 key2 #合并,取并集为key3
2、应用场景
网页的 UV (一个人访问一个网站多次,但是还是算作一个人!)
Bitmap(位存储,二进制,0,1两个状态)
1、常用命令
setbit sign 1 0 #记录第一天某个状态(0或1)
getbit sign 1 #获取某一天状态
bitcount sign #统计1的个数
2、应用场景
统计用户信息,活跃,不活跃! 登录 、 未登录! 打卡, 两个状态!