一、Redis基础知识
(1)redis默认有16个数据库;默认使用的是第0个数据库;切换数据库:
select index
获取数据库中的值大小:dbsize
(2):查看所有的key
(3):清空当前数据库:flushdb
(4)清空所有的数据库:flushall
(5)默认端口号:6379;
Redis的速度与服务器的配置和网络带宽有关。
(6)redis是单线程的,redis是将所有的数据都放入到内存中,所以操作是最快的,多线程的上下文切换是比较耗费时间的,而内存并没有上下文的切换。Redis的多次的读写都是在一个CPU上的;所以比快。
二、Redis的五大数据类型
查看key的命令:
- keys * :得到所有的key
- exist key
- move key 1 :移除key
- get key
- set key xxx
- expire name xxx :设置过期时间;
- ttl key :查看key的剩余时间
- type key :查看key的类型
(1) String
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
Redis 的 SET 和 GET 命令
1) 移除元素:move xxx 1
2) 获取长度: strlen key
3)增加长度:append key value
4) i++和 i--:自增1和自减1的操作: incr key / decr key
5) 指定减少的长度 :decrby key decrement
6) 截取字串:getrange key start end;
7) 存在时设置:设置过期时间
8) 不存在时设置:
9) 同时批量设置值和批量获得值(当key不存在的时候获取):
10) 设置一个对象User user:{id} :{filed}
11) 先get后set: getset name xxx 如果第一次get不存在,则就进行创建;
(2) List
Redis列表是简单的字符串列表,默认按照(从左开始插入数据)插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
List实际上是一个链表:List可以作为消息队列,或者栈;
1)从左边插入一个值:L LPUSH
2)从右边插入一个值:R RPUSH
3) 从左边移除一个值 LPOP
4) 从右边删除一个值 RPOP
5)根据下标获取值:LINDEX
6)返回列表的长度:LLEN
7):移除指定个数的元素:lrem key count value
8):保留一段区间的元素:TRIM key start stop ;而且会修改原来的List
9):LSET====>根据index设置一个key:前提是set要存在;如果存在则更新index下标的值
10):LINSERT===>指定位置插入元素:
(3) Set(无序的集合)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
1) 添加元素:
2) 获取set集合元素个数:
3) 获取set中所有的元素的值:
4) 移除set集合中的指定元素:
5) 移除set集合中随机元素:
6) 获取一个随机元素:
7) 将元素从setA 移动到 setB
8) 返回差集:
9) 返回交集:
10) 返回并集:
11) 返回差集然后存储到新的set中:key1 和key2是set
12) 返回交集然后存储到新的set中:
13) 返回并集然后存储到新的set中:
(4)Hash
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Hash更适合对象的存储;
1)hash中添加元素
2)hash中得到元素:
3)hash中同时设置多个字段
4)hash中同时得到多个字段:
5)得到所有的key和 value
6)hash中得到所有的key
7)hash中得到所有的values:
8)hash中删除指定的key字段
9)得到hash的长度
10) 判断hash中指定的字段是否存在:
11) hash中字段进行加减:
12) hash中字段如果不存在,进行设置
(5) Zset(有序集合)
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
排行榜应用的实现,可以使用Zset。
1) 添加一个元素
2) 移除一个元素或者多个元素:
3) 获取集合中成员的个数:
4) 计算指定区间的个数:[start,stop]
5) 通过索引区间返回有序集合指定区间的成员:
6) 返回索引:
7) 根据set中的 区间统计数量
三、三种特殊的数据类型:
(1) geospatial 地理位置;距离计算
Redis GEO 操作方法有:(先经度,后纬度)
GEO的底层就是Zset,所以Zset的命令也可以在GEO中使用。
1) geoadd:添加地理位置的坐标。(add)
2) geopos:获取地理位置的坐标。(position)
3) geodist:计算两个位置之间的距离(m/km/ft/mi)。(distance)
geodist参数:
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
4) georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
georadius参数说明:
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
- WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
- WITHCOORD: 将位置元素的经度和维度也一并返回。
- WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
- COUNT 限定返回的记录数。
- ASC: 查找结果根据距离从近到远排序。
- DESC: 查找结果根据从远到近排序。
5) georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。在这个范围内容的所有地理位置信息,返回一个集合。
6) geohash:返回一个或多个位置对象的 geohash 值。(了解)
添加一个地理位置
查询地理微信:
计算距离:
(2) hyperloglog 基数统计(不重复的元素)本质是一个Set
什么是基数:
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
命令 | 描述 |
---|---|
PFADD | 添加指定元素到 HyperLogLog 中。 |
PFCOUNT | 返回给定 HyperLogLog 的基数估算值。 |
PFMERGE | 将多个 HyperLogLog 合并为一个 HyperLogLog |
(3) bitmap 位图场景
位存储:0 或者1
一般两个状态的情况,可以使用bitmaps
命令
设置:setbit key index value
得到:getbit key
统计:bitcount key