redis 是k-v形式的非关系型数据库 其有5种基本数据类型 比如 String list hash set zset 这些数据类型都指的是 v的类型 key 还是字符串类型。
首先对key的操作有
1.expire 设置key 的过期时间
2. ttl 查看key还有多久过期
3.del 删除key
4.exists 判断key 是否存在
然后是value 为String 类型的操作有
1.set key value 设置 key value 如果key存在 value会被覆盖;
2. get key 通过key拿到value;
3.append key value 追加操作 如果key不存在那么就创建一个新的 key value;
4.strlen key 通过key 获得value 的长度;
5. incr key 值加一;
6.decr key 值减一;
7.getrange key start end 获得一个区间的值 最左边是0 最右边是 -1;
8.setex key seconds value 设置值的同时 设置过期时间;
9.setnx key value 如果key 不存在 则 设置 key value 返回1 如果存在返回0
然后是list 有序可重复的列表
1. lpush key value1 value2 从左边开始放 ;
2.lrange key start end 获取列表中指定下标区间的元素;
3.rpush key value1 value2 将一个或多个值依次插入列表尾部;
4.lpop key 删除最左边的元素 并返回删除的值;
5.rpop key 删除最右边的元素并返回值;
6.lindex key index 获取指定列表中指定下标的元素并返回;
7.llen key 获取指定列表的长度;
然后是set 值是无序不可重复的
1.sadd key value1 value2 添加;
2.smembers key 获得所有的元素;
3.sismember key value1 判断 value1是否存在;存在返回1 不存在返回0
4.scard key 获得元素的个数
5.srem key value1 value2 删除 元素 value1 value2;
6.spop key count 默认为1 从集合中 随机弹出 count个元素;
7.srandmember key count 随机删除 count 个;
8 . 交际 sinter key1 key2 两个集合的交集;
9. 并集 sunion key1 key2;
10 差集 sdiff key1 key2;
hash value 是hash类型 k1-v1 k2-v2
1.hset key filed value 将一个或多个键值对存储到指定集合中
2.hget key filed; 获取hash表中指定的filed值
3. hgetall key;获取指定hash表中的所有filed和value
4.hdel key filed1 filed2... 删除指定hash表中的一个或者多个filed
5.hlen key 获取指定hash表中所有的filed的个数
6.hexists key filed 判断指定hash表中指定的filed是否存在
7.hkeys key; 获取指定hash表中所有filed的列表
8. hvals key; 获取指定hash表中所有value的值
有序单列集合:zset()value 根据score排序
1. zadd key score1 member1 score2 member2 将一个或者多个member及score加入有序集合:
2. zrange key start end根据指定集合获取指定区间的元素
3. zrangebyscore key min max 根据指定分数区间获取元素 zrevrange key 倒叙输出
4.zrem key member1 member2 删除指定集合中一个或多个指定元素
5.zcard key 获取集合中元素的个数
6. zrank key member 获取指定元素的排名 zrevrank(倒叙排名:从大到小)
7. zcount key min max 获取指定集合中在指定分数区间的元素个数
8. zscore key member 获取指定集合中的指定元素的分数
上面就是一些基本数据结构 下面再说一下
Geo
1.geoadd key 精度 纬度 城市 添加
2.geopos key 城市 查看城市的精度维度
3.zrange key 0 -1 查看所有城市
4.geodist key 城市1 城市2 km(单位) 查看城市1 与2之间的距离
5.georadius key 精度 维度 范围 单位 查看指定精度维度 的范围下的所有城市
6.georadiusbymember key 城市 范围 单位 查询城市 范围内所有的城市
7.zrem key 城市 删除城市;
redis 一般我们可以用来做什么呢?
首先想到的 就是缓存 可以降低我们数据库的压力 但是也不是什么都可以放到redis 中 一般我们放的都是读多写少的数据 。
还有就是可以做 防止重复点击 因为redis 天然就是排队 单线程的 所以我们可以在点击的时候从redis中查询判断 是否在一定时间内 已经重复点击了 。
redis 的zset 数据结构 天然就可以排序 那么就可以做排行榜。
redis 的热key 如何解决?
首先什么是热key 就是比如一场活动 频繁的访问这一个key 导致redis 的性能下降 那么我们可以怎么解决 首先我们可以对这个热key 分别分配到不同的分片上 然后我们可以根据不同的用户id 去路由到不同的分片上 这样可以解决 , 我们还可以使用本地缓存来解决 因为本地缓存不需要有网络的io 所以他的效率比redis还要高,但是同样也会有不一致的现象 但是既然可以使用本地缓存那么不一致也没有太大的关系了。