Redis:远程字典服务
特性:
- 内存存储
- 效率高,用于高速缓存
- 地图信息分析
- 计时器,计数器,订阅系统
redis是单线程的,基于内存操作
Redis基础命令
redis默认有16个数据库,使用select命令切换数据库
set key value //新增键值
get key //获取某一个键值
select 1 //切换数据库
DBSIZE //查看数据库大小
move key name //移除key
keys * //查看所有key
flushdb //清空当前所有数据库
flushall //清空所有数据库
EXISTS key //查询某键key是否存在
EXPIRE key time //设置过期时间
ttl key //查看key剩余时间
type key //查看key类型
五大数据类型
String类型
APPEND key string //在key后添加string,若key不错在,则创建key
STRLEN key //获取字符串长度
incr key //自增1 后面添加值可设置步长
decr key //自减1 后面添加值可设置步长
GETRANGE key start end //查看指定范围字符串
SETRANGE key offset string //替换指定位置开始的字符串
setex key time value //新建key并设置过期时间
setnx key value//不存在则设置,若存在则覆盖
mset k1 v1 k2 v2…… //同时设置多个值
mget k1 k2…… //同时获取多个值
msetnx k1 v1 k2 v2…… //原子性操作,要么一起成功,要么一起失败
set user:1{name zhangsan age num……} //设置对象
getset key value //先获取再创建 若存在值,则获取原来值再设置新值
List类型
列表是指上是一个链表,在两边插入或改动值其效率更高,在中间改动值效率较低,可当作栈,队列、链表使用,常用于消息队列
LPUSH list num #列表头部插入值
RPUSH list num #再列表尾部插入值
LRANGE lsit #获取list值
LRANGE list start end #获取指定范围值
LPOP list #移除列表第一个元素
RPOP list #移除列表最后一个元素
LINDEX LIST num #通过下标获取值
LLEN list #获取列表长度
LREM list num #移除指定值
LREM list 2 num #移除指定数量的值
LTRIM list start end #获取指定范围值,list已被修改
rpoplpush list1 list2 #移除列表最后一个元素并移入新列表中
EXISTS list #判断列表是否存在
lset list 0 item #更新列表中指定位置值,若列表不存在则报错
LINSERT list before/after value num #再列表中的value值前面或后面插入num值
SET类型
SET值无序,不重复
sadd myset #向set中添加值
SMEMBERS myset #查看set中所有值
SISMEMBER myset value #判断value值是否在set集合中
scard myset #获取set集合中元素个数
srem myset value #移除set集合中指定元素
SRANDMERBER myset #随机取出一个元素
SRANDMERBER myset num #随机取出指定个数元素
SPOP myset #随机删除集合中元素
SDIFF myset1 myset2 #两个集合差集
SINTER myset1 myset2 #两个集合交集
SUNION myset1 myset2 #两个集合并集
HASH类型
以key-map形式存储,可用于存储变更的数据,适合对象的存储
hset myhash field1 value #添加key-value值
hget myhash field1 #获取一个字段值
hmset myhash field1 value1 field2 value2…… #设置多个key-value值
hmget myhash field field2 #获取多个字段值
hgetall myhash #获取全部数据
hdel myhash field #删除指定字段,其字段所对应的值也被删除
hlen myhash #获取hash字段数量
HEXISTS myhash field #判断某个field值是否存在
HINCRBY myhash field num #指定增量num
hsetnx myhash field value #如果不存在则设置,存在则不能设置
ZSETE类型
有序集合,在SET基础上添加了一个值
zadd myset salary 8000 zhangsan #添加值
zadd myset field1 value1 field2 value2…… #添加多个值
ZRANGEBYSCORE salary min(-inf) max(+inf) #从小到大显示全部用户
ARANGEBYSCORE salary min max withscores #显示全部的用户并且附带成绩
ZREVANGE salary 0 -1 #从大到小排序
zrem salary zhangsan #移除有序集合中的指定元素
zcard salary #获取有序集合中的个数
zcout salary 3000 12000 #获取指定区间成员数量
三种特殊数据类型
GEOSPATIAL地理空间
GEOADD 添加地理位置,常用于查找附近的人,附近好友等
GEOADD key longitude latitude member [longitude latitude member ...]
127.0.0.1:6379> geoadd city 13.3618 38.115556 "suzhou"
(integer) 1
127.0.0.1:6379> geoadd city 86.6723 018.3251 "chongqing"
(integer) 1
127.0.0.1:6379> geoadd city 32.6783 26.3642 "lanzhou"
(integer) 1
**GEODIST **返回两个给定位置之间的距离
GEODIST key member1 member2 [unit]
unit为返回距离的单位,其值有:m,km,mi,ft,默认为m
127.0.0.1:6379> geodist city suzhou lanzhou
"2230774.1010"
**GEPHASH **返回一个或多个位置元素的 Geohash 表示
GEOHASH key member [member ...]
127.0.0.1:6379> geohash city suzhou
1) "sqc8b49z0w0"
**GEOPOS **从key里返回所有给定位置元素的位置(经度和纬度)
GEOPOS key member [member ...]
127.0.0.1:6379> geopos city suzhou
1) 1) "13.36180239915847778"
2) "38.11555639549629859"
GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
可选参数:
-
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 -
WITHCOORD
: 将位置元素的经度和维度也一并返回。 -
WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。使用Count来筛选前count个元素
127.0.0.1:6379> georadius city 15.981 82.361 50000 km
1) "suzhou"
2) "lanzhou"
3) "chongqing"
GEORADIUSMEMBER 和GEORADIUS一样,但并不需要给出经纬度,而是由给定的位置元素以找出位于指定范围内的元素
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
127.0.0.1:6379> georadiusbymember city suzhou 3000 km
1) "suzhou"
2) "lanzhou"
HYPERLOGLOG
PFADD key element [element ...]
将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中
127.0.0.1:6379> pfadd myset1 1 3 5 6 8 9
(integer) 1
127.0.0.1:6379> pfadd myset2 1 2 4 6 7 8 0
(integer) 1
PFCOUNT key [key ...]
当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0
当参数为多个key时,返回这些HyperLogLog并集的近似基数
127.0.0.1:6379> pfcount myset1 myset2
(integer) 10
127.0.0.1:6379> pfcount myset1
(integer) 6
127.0.0.1:6379> pfcount myset2
(integer) 7
PFMERGE destkey sourcekey [sourcekey ...]
将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集
127.0.0.1:6379> pfmerge myset3 myset1 myset2
OK
Bitmap
用来存储只有两种状态的值,即0和1,如记录打卡次数,网站用户是否活跃
setbit key offset value
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0
获取某个属性值
getbit key offset
127.0.0.1:6379> getbit sign 5
(integer) 1
统计值为1个数
127.0.0.1:6379> bitcount sign
(integer) 6