Redis简介
- Redis是一个基于内存存储的数据库,可以做持久化(RDB,AOF);
- 基于key-value存储,value支持多种数据类型,
- 支持集群及事务;
- Redis默认有16个数据库,可以在配置文件中设置(databases 16);
- Redis是单线程+IO多路复用
- Redis的单条命令的操作都是原子性的(Lua脚本除外)
Redis测试工具
Redis数据类型
一.String
1.String 简介
String是一个二进制安全的,一个value最多可以存储512M;String的数据结构是一个可以修改的字符串(简单动态字符串),采用预分配冗余空间的方式来减少内存的重新分配。
2.String数据结构的常用命令
//1.插入数据
set key value
//2.获取当前key
get key
//3.递增 对当前key的值加1
incr key
//4.递减 对当前key的值减1
decr key
//5.按照步长递增 对当前key的值加10
incrby key 10
//6.照步长递减 对当前key的值减10
decrby key 10
//7.获取key对应得0到2的值 包含0和2 如果是0 -1表示获取所有的value
getrange key 0 2
//8.替换offset开始的字符串
setrange key [offset] value
//9. 设置过期时间
setex key [experi] value
//10.如果key存在就不设置值 如果不存在就设置值
setnx key value
//11.设置多个K-V
mset k1 v1 k2 v1 k3 v3
//12.设置多个值 如果存在就设置失败 如果不存在就创建 只要其中一个key存在就全部都不会设置成功
msetnx k1 v1 k2 v2
//13.判断当前key是否存在
exists key
//14.获取当前key对应value的长度
strlen key
//15.最佳当前key对应的value 如果当前key不存在 就相当于set
append key 'aaaaa'
//16.先获取当前key的值 在设置值
getset key value
二. List
1.List数据结构
List是一个简单的字符串列表,按照插入顺序排序,是一个双向链表。List是一个快速链表(quickList),当数据较少是是一个zipList(压缩列表),当有多个压缩列表用链表信息构建出quickList。
2.基本命令
//1.从左边插入值
lpush key value1 value2 value3
//2.获取下标start到end中的所有值 包含start和end
lrange key <start> <end>
//3.从右边插入值
rpush key v1 v2 v3
//4.从左边弹出一个值 返回并删除值
lpop key
//5.从右边弹出一个值 返回并删除值
rpop key
//6.获取当前key下标的值
lindex key <index>
//7.获取当前key列表的长度
llen key
//8.移除当前key中count个指定value 从左边开始移除
lrem key <count> value
//9.截取当前key中对应集合中下标start到end中的值,将其他的值移除
ltrim key <start> <end>
//10.移除key1中的最右边的元素,并将其添加到key2中的元素
rpoplpush key1 key2
//11.将列表中指定下标(index)的值替换为新的值 如果不存在列表或列表中的值不存在当前下标会报错
lset key <index> value
//12.向当前key中将newvalue插入到列表中v1元素的前面或者后面; v1会从左到右查询 如果v1不存在则返回-1
linsert key <before|after> v1 newvalue
三.Set
1.Set数据结构
是一个无序集合,底层有两种方式实现有序数组及Hash表
2.基本命令
//1.添加元素
sadd key value
//2.查看set的所有值
smembers key
//3.判断当前值是否存在 存在返回1 不存在返回0
sismember key value
//4.获取set集合中的元素个数
scard key
//5.移除set集合中的指定元素
srem key value
//6.随机移除集合中的一个值 并返回
spop key
//7.将集合k1中的v1移动到k2
smove k1 k2 v1
//8.去两个集合中的交集
sinter k1 k2
//9.获取两个集合中的并集
sunion k1 k2
//10.获取两个集合中的差集
sdiff k1 k2
四.Hash
1.hash的数据结构
是一个k-v类型,对应的数据结构为两种,ziplist和hashtable
2.基本命令
//1.添加值
hset key field value
//2.获取值
hget key fileld
//3.存多个值
hmset key field1 v1 field2 v1
//4.获取多个值
hmget key field1 field2
//5.获取当前key的值
hgetall key
//6.删除指定key
hdel key
//7.获取key的长度
hlen key
//8.判断hash中的key对应下的字段是否存在
hexists key filed
//9.获取当前key中的所有filed
hkeys key
//10.获取当前key中的所有value
hvals key
//11.对指定key 中的filed加10 如果10为负责减10
hincrby key filed1 10
//12.设置指定key的filed 不存在则添加 否则添加失败
hsetnx key filed value
五.ZSet
1.ZSet数据结构
是一个基于score排序、不重复的集合,默认从低到高排序;基于hash表及跳跃表来实现,hash存储value及score,基于跳跃表给元素排序
2.基本命令
//1.添加值
zadd key <score> v1 <score> v2
//2.根据score从小到大排序-inf负无穷大 +inf正无穷大
zrangebyscore key -inf +inf
#表示分数大于1且小于等于5
zrangebyscore key (1 5
//3.移除key中的指定元素
zrem key value
//4.获取有序集合中的个数
zcard key
//5.从大到小排序
zrevrange key 0 -1
//6.获取key中min到max中值得个数
zcount zk <min> <max>
六.地理位置(geospatial)
1.简介
将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set(Zset)这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。
该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
2.常用命令
//1.添加地理位置
geoadd key 经度 维度 member
//2.返回两个给定位置之间的距离 默认单位为m
geodist key member1 member2 km
//3.返回以指定经纬度为原点,周围500km的数据 withdist:显示直线距离
georadius 经度 维度 500 km withdist
//4.返回指定元素范围内的元素
georadiusbymember key member 1000 km