Redis简介、公共操作和五种常用数据类型及其相关操作

1.何为Redis

  • Redis是NoSQL数据库,是一种非关系型数据库。
  • Redis将数据保存在内存中,因此速度超快。
  • Redis中只有键值对(即key和value)。
  • Redis共有八种数据类型,常用的有五种数据类型。
  • Redis中单个Key最大支持到512M。
  • Redis有 0~15号库,也就是说有16个库,默认使用0号库。
  • Redis使用的端口号为6379。

我们以下的操作均使用阿里云服务器Ubuntu系统进行,阿里云服务器的购买、端口配置及Redis的安装请参考我的这篇博客

redis-cli  # 运行redis
config set requirepass 密码  # 设置redis的密码
auth 密码  # 输入密码,获得操作权限

2.Redis公共操作

以下为公共操作,

select 1  # 选择1号数据库
keys *  # 获取所有的key
keys t*  # 获取所有键以t开头的key
dbsize  # 获取当前数据库的key的数量
flushdb  # 清空当前库中的key
flushall  # 清空所有库中的key

3.五种常用数据类型

在Redis中我们常用的数据类型有以下五种,

  • string字符类型,最基本的数据类型。
  • hash哈希,缓存常用的。
  • list,列表。
  • set无序集合。
  • zset有序集合。

3.1.String类型

我们先看一下单个键值对的相关操作,

127.0.0.1:6379> set username zhangsan  # 添加一个键值对,键为 username ,值为 zhangsan
OK
127.0.0.1:6379> keys *  # 获取所有的键
1) "username"  # 返回 username
127.0.0.1:6379> get username  # 获取键 username 所对应的值
"zhangsan"
127.0.0.1:6379> strlen username  # 获取键为 username 的值的长度
(integer) 8

127.0.0.1:6379> set name lisi  # 添加一个键值对,键为 name ,值为 lisi
OK
127.0.0.1:6379> keys *  # 获取所有的键
1) "username"
2) "name"
127.0.0.1:6379> del name  # 删除键为 name 的键值对
(integer) 1  # 返回值为1,即为真,删除成功
127.0.0.1:6379> keys *  # 获取所有的键
1) "username"

127.0.0.1:6379> ttl username  # 查看键为 username 的键值对的过期时间
(integer) -1  # 返回值为-1,说明永不过期。如果返回值为-2,说明已过期;如果返回值为正数(如n),说明经过n秒后,该键值对过期
127.0.0.1:6379> expire username 10  # 设置键为 username 的键值对10秒后过期
(integer) 1
# 经过5秒后运行以下代码
127.0.0.1:6379> ttl username  # 查看键为 username 的键值对的过期时间
(integer) 5  # 返回值为5,说明再经过5秒后该键值对过期
# 再经过10秒后运行以下代码
127.0.0.1:6379> ttl username  # 查看键为 username 的键值对的过期时间
(integer) -2  # 返回值为-2,说明该键值对已经过期
127.0.0.1:6379> setex name 10 lisi  # 添加一个10秒后会过期的,键为 name ,值为 lisi 的键值对
OK
# 经过3秒后运行以下代码
127.0.0.1:6379> ttl name  # 查看键为 name 的键值对的过期时间
(integer) 7
127.0.0.1:6379> get name  # 查看键为 name 的键值对的值
"lisi"
# 再经过10秒后运行以下代码
127.0.0.1:6379> ttl name  # 查看键为 name 的键值对的过期时间
(integer) -2
127.0.0.1:6379> get name  # 查看键为 name 的键值对的值
(nil)  # 返回值为空

127.0.0.1:6379> set num 1  # 添加一个键值对,键为 name ,值为 lisi
OK
127.0.0.1:6379> get num  # 获取键为 num 的键值对的值
"1"
127.0.0.1:6379> incr num  # 键为 num 的键值对的值自增1
(integer) 2
127.0.0.1:6379> incrby num 12  # 键为 num 的键值对的值自增12
(integer) 14
127.0.0.1:6379> incrbyfloat num 0.12  # 键为 num 的键值对的值自增0.12
"14.12"
# 自减为decr

我们接下来看一下对于多个键值对的操作,

127.0.0.1:6379> mset name1 zhao name2 qian name3 sun name4 li  # 批量添加键值对,一个键对应一个值
OK
127.0.0.1:6379> keys *
1) "num"
2) "name2"
3) "name4"
4) "name1"
5) "name3"
# 我们可以看到成功添加了name1,name2,name3,name4
127.0.0.1:6379> mget name1 name2 name3 name4  # 批量获取键对应的值
1) "zhao"
2) "qian"
3) "sun"
4) "li"

3.2.hash类型

hash是键值对的集合,特别适合存放对象。

以下是hash类型的相关操作,

127.0.0.1:6379> hset user1 name zhangsan age 18 sex 0  # 添加一个hash对象 user1 ,其 name 为 zhangsan , age 为18, sex 为0
(integer) 3
127.0.0.1:6379> keys *  
1) "user1"

127.0.0.1:6379> hget user1 name
"zhangsan"
127.0.0.1:6379> hget user1 age
"18"

127.0.0.1:6379> hvals user1  # 获取 user1 中所有的值
1) "zhangsan"
2) "18"
3) "0"

127.0.0.1:6379> hmget user1 name age sex  # 批量获取 user1 中键对应的值
1) "zhangsan"
2) "18"
3) "0"

127.0.0.1:6379> hlen user1  # 获取 user1 中键值对的个数
(integer) 3
127.0.0.1:6379> hstrlen user1 name  # 获取 user1 中键 name 对应值的长度
(integer) 8

127.0.0.1:6379> hexists user1 name  # 成员判断,判断 user1 中是否存在键 name
(integer) 1  # 返回1表示存在
127.0.0.1:6379> hexists user1 hobby
(integer) 0  # 返回0表示不存在

3.3.list列表

以下为list列表的相关操作,

127.0.0.1:6379> lpush language python  # 从 language 列表左侧插入 python
(integer) 1
127.0.0.1:6379> lpush language java  # 从 language 列表左侧插入 java
(integer) 2
127.0.0.1:6379> rpush language ruby  # 从 language 列表右侧插入 ruby
(integer) 3
127.0.0.1:6379> rpush language C  # 从 language 列表右侧插入 C
(integer) 4
127.0.0.1:6379> lrange language 0 3  # 从 language 列表左侧获取索引为0到3的值
1) "java"
2) "python"
3) "ruby"
4) "C"

127.0.0.1:6379> lpop language  # 从 language 列表左侧弹出一个值
"java"  # 弹出值为java
127.0.0.1:6379> rpop language  # 从 language 列表右侧弹出一个值
"C"  # 弹出值为c

127.0.0.1:6379> lindex language 0  # 获取 language 列表中索引为0的值
"python"
127.0.0.1:6379> llen language  # 获取 language 列表值的个数
(integer) 2

127.0.0.1:6379> lset language 1 PHP  # 将 language 列表中索引为1的值修改为 PHP
OK
127.0.0.1:6379> lindex language 1  # 获取 language 列表中索引为1的值
"PHP"

3.4.set无序集合

我们要注意集合的唯一性。

以下为set无序集合的相关操作,

127.0.0.1:6379> sadd redis 1 2 3 4 5  # 添加一个 redis 无序集合,其成员为1、2、3、4、5
(integer) 5
127.0.0.1:6379> smembers redis  # 查看无序集合 redis 的所有成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

# 集合运算
# 1.差集
127.0.0.1:6379> sadd mysql 1 2 3  # 添加一个 mysql 无序集合,其成员为1、2、3
(integer) 3
127.0.0.1:6379> sdiff mysql redis  # 求 mysql 与 redis 的差集
(empty list or set)  # 为空集
127.0.0.1:6379> sdiff redis mysql  # 求 redis 与 mysql 的差集
1) "4"
2) "5"
# 注意:差集的结果与参数顺序有关,长参数一般放在第一位

# 2.交集
127.0.0.1:6379> sinter redis mysql  # 求 redis 与 mysql 的交集
1) "1"
2) "2"
3) "3"
# 交集的结果与参数顺序无关

# 3.并集
127.0.0.1:6379> sunion redis mysql  # 求 redis 与 mysql 的并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
# 并集的结果与参数顺序无关

127.0.0.1:6379> sismember redis 3  # 判断3是否是 redis 的成员
(integer) 1
127.0.0.1:6379> sismember redis 30  # 判断30是否是 redis 的成员
(integer) 0

3.5.zset有序集合

zset有序集合的相关操作如下,

# 注意:zset不同于set,zset多了一个 score 参数
127.0.0.1:6379> zadd z1 0 zhao  # 给 z1 有序集合添加一个 score 为0,值为 zhao 的数据
(integer) 1
127.0.0.1:6379> zadd z1 0 qian  # 给 z1 有序集合添加一个 score 为0,值为 qian 的数据
(integer) 1
127.0.0.1:6379> zadd z1 1 sun  # 给 z1 有序集合添加一个 score 为1,值为 sun 的数据
(integer) 1
127.0.0.1:6379> zadd z1 1 li  # 给 z1 有序集合添加一个 score 为1,值为 li 的数据
(integer) 1
127.0.0.1:6379> zadd z1 1 zhou  # 给 z1 有序集合添加一个 score 为1,值为 zhou 的数据
(integer) 1
127.0.0.1:6379> zadd z1 2 wu  # 给 z1 有序集合添加一个 score 为2,值为 wu 的数据
(integer) 1
# 注意:同一个有序集合中,不能有重复值,即使该值在有不同的 score
127.0.0.1:6379> zadd z1 2 li  # 给 z1 有序集合添加一个 score 为2,值为 li 的数据
(integer) 0  # 返回值为0,添加失败

127.0.0.1:6379> zrange z1 0 2  # 取出有序集合 z1 中索引值为0到2的值,类似于list中的lrange操作
1) "qian"
2) "zhao"
3) "sun"

127.0.0.1:6379> zrangebyscore z1 0 1  # 取出有序集合 z1 中 score 为0到1的值
1) "qian"
2) "zhao"
3) "sun"
4) "zhou"

127.0.0.1:6379> zcount z1 0 1  # 获取序集合 z1 中 score 为0到1的值的数量
(integer) 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值