Redis的常用数据类型:String字符串、List列表、Set集合、Hash哈希、Zset有序集合
1.Redis键的操作
keys * 查看当前库的所有key
exists <key> 判断某个key是否存在
type <key> 查看某个key是什么类型
del <key> 删除指定key数据
unlink <key> 根据value选择非阻塞删除
expire <key> <秒钟> 为指定key设置过期时间
ttl <key> 查看key还有多少秒过期,-1表示永不过期,-2表示已过期
select 0~15 切换数据库
dbsize 查看当前数据库key的数量
flushdb 删除当前数据库的数据
flushall 删除所有数据库的数据
2.Redis字符串操作(字符串的最大长度是512M)
get <key> 查询对应键值
append <key> <value> 将给定的value追加到原值的末尾
stelen <key> 获得值的长度
setnx <key><value>只有在key不存在时,设置key的值
incr <key> 将key中存储的数字值增1,只能对数字值进行操作,如果为空,则新增值为1
decr <key> 将key中存储的数字值减1,只能对数字值进行操作,如果为空,则新增值为-1
incrby/decrby <key> <步长> 将key中存储的数字值增减,自定义步长
redis是单线程+多路IO复用,是原子性的操作,所以不存在多线程运算结果错误问题
mset <key1> <value1> <key2> <value2>……同时设置一个或多个key-value对
mget <key1> <key2> ……同时获取一个或多个value
msetnx <key1> <value1> <key2> <value2> ……当给定的key都不存在时,设置一个或多个
key-value
redis原子性,有一个失败则都失败
getrange <key> <起始位置> <结束位置> 获取值的范围,前包后包,且下标从0开始
setrange <key> <起始值> <value> 在起始位置开始覆盖并写入value的值
setex <key> <过期时间> <value> 在设置键值的同时,设置过期时间,单位秒
getset <key><value> 以新值换旧值,设置新值同时返回旧值
3.List列表(单键多值、双向链表)
lpush/rpush <key> <value1> <value2> <value3>……从左边/右边插入一个或多个值(l代表left,r代表right,push是推的意思,不论从左边插入还是右边插入,先插入的值都是往中间去)
lpop/rpop <key> 从左边/右边吐出来一个值。值在键在,值亡键亡
rpoplpush <key1> <key2> 从<key1>列表右边吐出一个value添加到<key2>列表左边
lrange <key> <start> <stop> 按照索引下标获得元素
lrange <key> 0/-1 0左边第一个,-1 右边第一个,0 -1 代表取所有
lindex <key> <index> 根据索引下标获取元素,从0开始
llen <key> 获得列表长度
linsert <key> before/after <value> <newvalue> 在<value>元素的前边/后边插入一个<newvalue>
lrem <key> <n> <value> 从左边删除n个 value
lset <key> <index> <value> 将列表key下标为<index>的元素替换为<value>
4.集合set(无序、元素不可重复的集合,数据结构是dict,是用哈希表实现的)
sadd <key> <value> 在<key>里添加一个元素(不可重复)
smembers <key> <value> 查询<key>集合里所有的元素
sismember <key> <value> 判断集合<key>是否含有值<value> 有为1 没有为0
scard <key> 返回该集合的元素个数
serm <key> <value1> <value2>……删除集合中的某个元素
spop <key> 随机从该集合中吐出一个值
srandmember <key> <n> 随机从该集合中取出n个值,不会从集合中删除
smove <source> <destination> <value> 把集合中一个值从一个集合移动到另一个集合
sinter <key1> <key2> 返回两个集合的交集元素
sunion <key1> <key2> 返回两个集合的并集元素
sdiff <key1> <key2> 返回两个集合的差集元素(key1中的,不包含key2中的)
5.哈希(类似Java中的map,Redis hash是一个string类型的field和value的映射表,特别适合存储对象)Hash类型当field和value长度短且个数较少时,使用ziplist,否则使用hashtable
hset <key> <field> <value> 给<key>集合中的<field>键赋值<value>
hget <key> <field> 从<key>集合<field>取出<value>
hmset <key1> <field1> <value1> <field2> <value2> …… 批量设置hash的值
hexists <key> <field> 查看哈希表key中,给定域field是否存在
hkeys <key> 列出该hash集合的所有field
hvals <key> 列出该hash集合的所有value
hincrby <key> <field> <increment> 为哈希表key中的域field的值加上增量1 -1
hsetnx <key> <field> <value> 当field不存在时,将哈希表key中的域field的值设置为value
6.有序集合Zset(zset底层使用了两个数据结构,hash和跳跃表,hash的作用就是关联元素value和权重score,跳跃表的目的在于给元素value排序根据score的范围获取元素列表)
zadd <key> <score1> <value1> <score2> <value2>…… 将一个或多个元素及其评分score值加入到有序集合key当中
zrange <key> <start> <stop> [WITHSCORES] 返回有序集中,下标在<start> <stop>之间的元素,若是0 -1 则是返回全部,带 withscores,可以让分数一起和值返回到结果集
zrangebyscore <key> <min> <max> [withscores] 返回有序集key,所有score值在min和max之间的,包括等于min和max的成员,并按照从小到大递增的顺序依次排列
zrevrangebyscore <key> <max> <min> [withscores] 同上,但为从大到小排列
zincrby <key> <increment> <value> 为元素的score加上增量
zrem <key> <value> 删除该集合下,指定值的元素
zcount <key> <min> <max> 统计该集合,分数区间内的元素个数
zrank <key> <value> 返回该值在集合中的排名,从0开始
7.Redis6新数据类型Geospatial
geo地理信息的缩写,就是元素的二维坐标,在地图上就是经纬度。
geoadd <key> <longitude> <latitude> <member> [longitude latitude member...]添加地理位置(经度、纬度、名称)
geopos <key> <member> [member...] 获得指定地区的坐标值
geodist <key> <member1> <member2> [m|km|ft|mi] 获取两个位置之间的直线距离
[m表示单位米(默认),km千米,mi英里,ft英尺]
(我的坐标是假的,请忽略结果)
georadius <key> <longitude> <latitude> <radius> [单位]分别代表key,精度,纬度,距离,以给定经纬度为中心,找出某一半径内的元素