Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
( 上述内容均转自菜鸟教程https://www.runoob.com/redis/redis-intro.html )
Linux环境下Redis的安装
源代码构建的方式进行安装为例
~ wget https://download.redis.io/releases/redis-5.0.7.tar.gz
~ gunzip redis-5.0.7.tar.gz
~ tar -xvf redis-5.0.7.tar
~ cd redis-5.0.7
~ make && make install
( 其他方式请自行参考https://www.runoob.com/redis/redis-install.html )
连接Redis数据库并添加数据
启动Redis服务器
~redis-server --requirepass password(设定连接密码) --port 1234设定端口(默认使用6379端口) >> redis.log(将执行过程中生成的数据重定向) &(后台运行)
( Redis的更多配置方法参考https://www.runoob.com/redis/redis-conf.html )
连接Redis服务器
连接本地服务器(localhost)
~redis-cli
连接远程服务器
~redis-cli -p prot(输入端口号) -h host(输入ip地址) -a password(输入密码)
基础指令
指令 | 指令说明 |
---|---|
auth password(连接密码) | 验证密码是否正确 |
echo message | 打印message内容 |
ping | 测试是否成功连接,成功的话会返回pong |
select 编号 | 切换数据库,redis默认会为用户创建16个数据库 |
quit | 断开与redis的连接 |
set key value | 往数据库中添加键值对 |
set key value ex time(秒数) | 向数据库中添加一对time后会失效的键值对 |
get key | 获取键对应的值 |
ttl key | 查看键对应的键值对的过期时间 -1代表永不过期 |
expire key time | 给指定的键对应的键值对设置过期时间 |
keys * | 查看数据库中的所有的键 |
dbsize | 查看数据库中存在的键值对的数量 |
save | 保存数据 |
bgsave | 在后台保存数据 |
flushdb | 清空当前数据库中的数据 |
flushall | 清空所有数据库中的数据 |
exists key | 判断指定的键是否存在 |
type key | 查看指定的键对应的数据类型 |
Redis的核心数据类型:
字符串 - String
指令 | 指令说明 |
---|---|
strlen key | 获取字符串长度 |
append key value2 | 给字符串追加内容 |
mset key1 value1 key2 value2 | 添加多组键值对 |
mget key1 key2 | 查看多个键对应的值 |
incr key | 值加1 |
incrby key value | 值加上value |
decr key | 值减1 |
decrby key value | 值减去value |
getrange key start end | 获取字符串指定范围的子串 |
setrange key offset value | 修改字符串指定位置的内容 |
哈希(表) - hash
指令 | 指令说明 |
---|---|
hset key field value | 添加hash类型键值对 |
hmset key field1 value1 field2 value2 | 添加多组hash类型键值对 |
hget key field | 获取hash类型字段对应的值 |
hmget key field1 field2 | 获取hash类型多个字段对应的值 |
hgetall key | 获取hash类型所有的字段和对应的值 |
hkeys key | 获取hash类型所有的字段 |
hvals key | 获取hash类型所有字段的值 |
hexists key field | 判断hash类型某个字段是否存在 |
列表 - list
指令 | 指令说明 |
---|---|
lpush key value1 value2 value3 | 在左边添加元素 |
rpush key value1 value2 value3 | 在右边添加元素 |
lpop key | 从左边移除一个元素 |
rpop key | 从右边移除一个元素 |
lrange key start end | 查看列表指定范围的元素 |
llen key | 查看列表元素个数 |
lindex key index | 查看列表指定位置元素 |
lrem key count value | 删除列表中指定元素 |
集合 - set
指令 | 指令说明 |
---|---|
sadd key value1 value2 value3 | 添加元素 |
srem key value | 删除元素 |
spop | 获取随机元素(取出后删除) |
scard key | 查看元素个数 |
smembers key | 查看所有元素 |
sismember key value | 查看集合中有没有指定元素 |
sinter key1 key2 | 交集 |
sunion key1 key2 | 并集 |
sdiff key1 key2 | 差集 |
有序集合 - zset
指令 | 指令说明 |
---|---|
zadd key score1 mem1 score2 mem2 | 添加元素 |
zrem key mem | 删除元素 |
zrange key start end | 按score的升序查看元素 |
zrevrange key start end | 按score的降序查看元素 |
zscore key mem | 查看元素对应的score |
zincrby key value mem | 修改元素的score值 |
LBS应用 - Location-Based Service - 基于位置的服务
LBS中的geo方法
指令 | 指令说明 |
---|---|
geoadd key location1 经度 纬度 location2 经度 纬度… | 添加位置坐标 |
geodist key location1 location2 | 计算位置之间的距离 |
georadius key 经度 纬度 距离 withcoord(显示坐标) withdist(显示距离) | 显示以某个位置为中心一定距离的半径范围内的位置坐标及距离 |