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、应用场景
      统计用户信息,活跃,不活跃! 登录 、 未登录! 打卡, 两个状态!