基本操作命令
#设置一个key
SET name test
#获取一个key
GET name
#设置key的过期时间
EXPIRE name 10
#查看key的过期时间 -1表示永不过期
TTL name
#查询是否存在key
EXISTS name
#移动数据到其他数据库 1表示1号数据库 (从0开始)
MOVE name 1
#查看key的类型
TYPE name
可查看中文翻译网站命令介绍: http://redis.cn/commands.html
5大常用数据类型
-
String类型
#追加字符串 如果当前key不存在 就set这个key APPEND name 321 #查看字符串长度 STRLEN name #对数值型value加1 非数值型要报错 view是一个String类型的key INCR view #对数值型value减1 DECR view #指定增长数量 INCRBY view 10 #指定减少数量 DECRBY view 5 #截取字符串 0到3 共4个字符 如果3超出字符串长度 截取到末尾 GETRANGE name 0 3 #截图所有字符 GETRANGE name 0 -1 #替换value 从第1个位置替换后面两个字符 SETRANGE name 1 xx #如果key存在就重新设置 300为过期时间秒 SETEX key1 300 v1 #如果key不存在才设置 否则不设置 SETNX key2 v2 #批量设置key-value mset k1 v1 k2 v2 k3 v3 #批量获取key mget k1 k2 k3 #如果不存在 则批量设置 如果其中一个k1存在 则该命令执行失败 #msetnx是一个原子性操作 MSETNX k1 h1 k4 v4 #先get 再set GETSET db redis ==#其他用法== #保存一个对象 key为 user:{id}:{filed} MSET user:1:name zhangsan user:1:age 3 #获取一个对象 MGET user:1:name user:1:age
- List(列表)数据类型
大多数的list命令都是以L开头的
#添加一个list 从左边操作 LPUSH list lv1 lv2 #添加值到list 从右边操作 RPUSH list rv1 rv2 #获取全部list 按以上结果为 lv2,lv1,rv1,rv2 LRANGE list 0 -1 #获取部分list LRANGE list 0 1 #从左边移除一个值 LPOP list #从右边移除一个值 RPOP list #按下标取一个值 LINDEX list 1 #查看list长度 LLEN list #移除value 2表示移除个数 lv2表示值 返回真实移除个数 LREM list 2 lv2 #截取list 只保留第1到第2个元素 LTRIM list 1 2 #移除右边第一个元素到其他List RPOPLPUSH list list2 #按下标位置更新元素的值 LSET list 0 h1 #在现有元素的前面插入一个新元素 LINSERT list before h4 h3 #在现有元素的后面插入一个新元素 LINSERT list after h4 h5
list的实际数据结构是一个链表。list中没有查询元素是否存在的操作,如果有这种需求,应该换成set集合。
- set(集合)
set集合中不能有重复的值。全部命令都以S开头
#添加set集合元素 SADD myset hello wl-it #查看set元素列表 SMEMBERS myset #查看元素是否存在 SISMEMBER myset hello #获取set集合中元素的个数 SCARD myset #移除指定元素 SREM myset hello #随机获取一个元素 SRANDMEMBER myset #随机获取指定个数的元素 SRANDMEMBER myset 2 #随机移除一个元素 SPOP myset #随机移除指定个数元素 SPOP myset 3 #移动一个指定元素到另外的set集合中 SMOVE myset myset2 set10 #查看两个集合的差集 SDIFF set1 set2 #查看两个集合的交集 SINTER set1 set2 #查看两个集合的并集 SUNION set1 set2
- hash
保存 key-map类型。 hash的所有命令都是以H开头的
#设置一个hash hset myhash k1 v1 #获取一个字段值 hget myhash k1 #设置一个hash key的多个元素 HMSET myhash k1 h1 k2 v2 k3 v3 #获取多个元素 HMGET myhash k1 k2 #获取所有元素 HGETALL myhash #删除hash中的一个字段 HDEL myhash k1 #获取字段的数量 HLEN myhash #判断hash中的指定字段是否存在 HEXISTS myhash k1 #只获取hash中所有的key HKEYS myhash #只获取hash中所有的value HVALS myhash #增加hash中一个字段的值 HINCRBY myhash view 2 #不存在则添加一个hash的字段 HSETNX myhash k4 v4
hash通常用来保存一个对象和经常变更的数据
- zset(有序集合)
zset有序集合所有的命令以Z开头
#添加一个有序集合 ZADD myzset 1 one #添加多个有序集合元素 ZADD myzset 3 three 4 four #查找有序集合所有元素 ZRANGE myzset 0 -1 #查找指定范围内的有序集合元素 ZRANGE myzset 0 2 #查找所有元素按照从小到大排序 ZRANGEBYSCORE myzset -inf +inf #查找范围内的数据 score从最小到3的数据 ZRANGEBYSCORE myzset -inf 3 #查找范围内的数据 并返回score ZRANGEBYSCORE myzset -inf 3 withscores #查看所有元素按照从大到小排序 ZREVRANGEBYSCORE myzset +inf -inf #移除一个元素 ZREM myzset four #查看集合中的元素个数 ZCARD myzset #获取区间中的元素个数 ZCOUNT myzset 1 4
3种特殊数据类型
-
geospatial 地理位置
如位置信息定位,附近的人,打车距离
先添加一些经纬度测试数据: https://jingweidu.51240.com/
- 有效的经度介于 -180 度至 180 度之间。
- 有效的纬度介于 -85.05112878 度至 85.05112878 度之间。
相关命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twUcydfq-1657348948555)(G:\学习\redis学习\redis学习笔记\image-20200405205457587.png)]
只有6个命令。
#添加测试数据 127.0.0.1:6379> GEOADD china:city 116.39 39.91 beijing (integer) 1 127.0.0.1:6379> GEOADD china:city 121.48 31.40 shanghai (integer) 1 127.0.0.1:6379> GEOADD china:city 120.21 30.30 hangzhou (integer) 1 127.0.0.1:6379> GEOADD china:city 106.54 29.40 chongqing (integer) 1 127.0.0.1:6379> GEOADD china:city 113.88 22.53 shenzheng (integer) 1 127.0.0.1:6379> GEOADD china:city 117.30 39.71 tianjin 108.93 34.23 xian (integer) 2 #获取数据 127.0.0.1:6379> GEOPOS china:city beijing chongqing 1) 1) "116.38999968767166138" 2) "39.90999956664450821" 2) 1) "106.54000014066696167" 2) "29.39999880018641676"
两点之间的距离 geodist
单位如下
m
表示单位为米。km
表示单位为千米。mi
表示单位为英里。ft
表示单位为英尺。
#查看两点间的距离 按km算 127.0.0.1:6379> GEODIST china:city beijing shanghai km "1051.9051"
GEORADIUS: 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
#获取指定经纬度为中心的指定范围内的城市 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist 1) 1) "chongqing" 2) "340.8679" 2) 1) "xian" 2) "481.1540" #以城市名称为中心 查找指定距离内的城市 127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km 1) "tianjin" 2) "beijing" 3) "xian" #按照字符串方式显示经纬度 127.0.0.1:6379> GEOHASH china:city beijing 1) "wx4g092see0"
Geo的底层实现原理就是zset集合。可以使用zset命令操作Geo数据。
-
Hyperloglog
Redis的Hyperloglog是用来做基数统计的数据结构
用来取两个集合的并集,做不精确的数据统计。它的所有命令都已PF开头
127.0.0.1:6379> PFADD mykey1 a b c d e f g (integer) 1 127.0.0.1:6379> PFCOUNT mykey1 (integer) 7 127.0.0.1:6379> PFADD mykey2 f g x y z a b (integer) 1 127.0.0.1:6379> PFCOUNT mykey3 (integer) 0 127.0.0.1:6379> PFCOUNT mykey2 (integer) 7 127.0.0.1:6379> PFMERGE mykey3 mykey1 mykey2 OK 127.0.0.1:6379> PFCOUNT mykey3 (integer) 10
-
Bitmap
Bitmap: 为存储数据结构。
以用户打卡功能为例
#设置每天打卡数据 127.0.0.1:6379> SETBIT sign 0 1 (integer) 0 127.0.0.1:6379> SETBIT sign 1 0 (integer) 0 127.0.0.1:6379> SETBIT sign 2 0 (integer) 0 127.0.0.1:6379> SETBIT sign 3 1 (integer) 0 127.0.0.1:6379> SETBIT sign 4 1 (integer) 0 127.0.0.1:6379> SETBIT sign 5 1 (integer) 0 127.0.0.1:6379> SETBIT sign 6 0 #查看某天是否打卡 127.0.0.1:6379> GETBIT sign 4 (integer) 1 127.0.0.1:6379> GETBIT sign 6 (integer) 0 #统计打卡天数 127.0.0.1:6379> BITCOUNT sign (integer) 4