相信的心就是你的魔法

Redis的核心数据类型

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(显示距离) 显示以某个位置为中心一定距离的半径范围内的位置坐标及距离
------ 本文结束------