redis 操作
1.开启redis服务
redis-server
2.进入redis
-
进入本地
redis-cli
-
进入远程
redis-cli -h <ip地址> -p 6379 redis-cli -h 127.0.0.1 -p 6379
退出
exit
3.redis数据库
Redis默认支持16个数据库,从0开始的递增数字,分别为0-15,每个数字代表一个数据库
Redis 中存储的值分为5种类型 set 类型 list类型 hash类型 集合(无序)类型 有序集合类型
以下代码皆以使用方法加例子表示。
1. 选择数据库
select <数据库号>
select 0 # 选择0号数据库
2.set(所存值只能为string类型)
添加键值对
# 增
set <键> <值>
set bar 2
# 查寻类型
type <键>
type bar
-- string
添加多个键值对
mset <键1> <值1> <键2> <值2> <键3 <值3>
查看
get <key>
get bar
查看多个
mget <key1> <key2> <key3>
查看所有键
keys *
通过辅助条件查询
keys bar[0-9] # 查询bar开头后面一个数为0-9的键
删除
del <key> # 可以同时删除多个键 返回值时键的个数
del bar bar1 bar2
条件删除
DEL命令的参数不支持通配符,但我们可以结合Linux的管道和xargs命令自己是删除所有符合规则的键。
比如要删除所有以user开头的键,可以执行如下操作
redis-cli KEYS "user*" | xargs redis-cli DEL
判断键是否存在
exists <key> # 存在返回1 否则返回0
设置过期时间
expire <key> <seconds>
expire bar 120
查看过期时间
ttl <key> # 返回-1 表示永久存在 返回-2 表示已经过期
ttl bar
设置数据为永久
persist <key>
清空所有数据
Redis数据库之间并不是完全隔离的,比如FLUSH ALL 可以完全清空一个Redis实力中所有数据库中的数据
flush all
数据修改
set num 1
append num 2 # 为键 num 添加字符2
# 如果value值为数字 即val必须为数值类型的字符串
incr num # 加一
decr num # 减一
# + 整数
incrby num 10 # 加10
# - 整数
decrby num 10 # 减10
3.list类型
列表添加方式有两种, 一种为 栈(先进后出),一种为 队列(先进先出)
添加数据
# 栈
lpush <key> <list> # 左边插入数据 # 返回列表当前数目
lpush mlist 3 4 5
# 队列
rpush <key> <list> # 右边插入数据
rpush mlist 2 1
读取数据
# 指定范围读取
lrange <key> <index_start> <index_end>
lrange mlist 0 -1 # 读出mlist中所有
- "5"
- "4"
- "3"
- "2"
- "1"
# 指定下标读取
lindex <key> <index>
删除数据
# 左删 返回删除的值
lpop <key>
# 右删
rpop <key>
# 批量指定删除
lrem <key> <count> <value>
lrem myli 2 1 # 当count > 0 列表会从左边开始删除 count 个 值为 value 的元素
lrem myli -2 2 # 当 count < 0 列表会从右边开始删除 |count| 个 值为 value 的元素
lrem myli 0 4 # 当 count = 0 列表会删除 所有 值为 value 的元素
4. 哈希类型(hash)
redis 是采用字典结构以键值对的形式存储数据的,而散列类型(hash) 的简直也是一种字典结构,其存储了字段(filed) 和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列数据类型不能嵌套其他的数据类型。一个散列类型的键可以包含至多232-1个字段。
添加数据
# 添加一个
hset <field> <key> <val>
hset bd name xiaoming
# 添加多个
hmset <field> <key1> <val1> <key2> <val2>
hmset bd age 12 _type people
查看数据
# 查看一个
hget <field> <key>
hget bd name
# 查看多个
hmget <field> <key1> <key2>
hmget bd name age
获取哈希类型中的所有键
hkeys <field>
hkeys bd
获取哈希类型中的所有值
hvals <field>
hvals bd
获取哈希类型所有键值对
hgetall <field>
hgetall bd
获取键值对个数
hlen #获取键值对个数
判断哈希类型的值是否存在
hexists <field> <key> # 有就返回1 无就返回0
hexists bd age
- 1
修改数据
# 增加数字
hincrby <field> <key> <val>
hincrby bd age 2
# 减则增加负数即可
删除哈希类型里面键
hdel <field> <key>
hdel bd age
直接删除哈希键
del <field>
5. 集合(无序)
添加数据
sadd <key> <val>
sadd s1 1 2 3 a b c
查询集合中所有数据
smembers <key>
smembers s1
删除
srem <key> <val> # 删除指定元素 , 返回剩余元素
srem s1 a
spop <key> <count> # 删除随机 count 个元素, 返回剩余元素
spop s1 2
随机获取数据
# 随机获取count 个元素, 返回count个不重复数,count为为负数则可能出现重复数据
srandmember <key> <count>
srandmember s1 4
获取元素个数
scard <key>
scard s1
交集、并集、差集
#交集
sinter 集合1 集合2 集合3.
sinterstore 新集合 集合1 集合2 集合3. #可以保存到新集合内
#并集
sunion 集合1 集合2 集合3.
sunionstore 新集合 集合1 集合2 集合3
#差集
sdiff 集合1 集合2 集合3.
sdiffstore 新集合 集合1 集合2 集合3
6.有序集合
方法汇总
# 有序集合
# 添加
zadd 键 分数 元素 分数 元素 分数 元素
zadd math 100 xiaoming 20 xiaohong 35 xiaoli
# 查看元素
zscore <field> <key>
-- <score>
# 查看元素个数
zcard 键
# 查看一个field下范围内的key
zrange math 0 -1
# 查看所有的key和 val (从小到大)
zrange math 0 -1 withscores
# 查看所有的key和 val (从大到小)
zrevrange <field> 0 -1 withscores
# 移除指定元素
zrem math 元素
# 根据分数范围获取元素 20-100
>=20 <= 100
zrangebyscore math 20 100
# 大于20分 -100内 (不包含20)
>20 <=100
zrangebyscore math (20 100
# 大于20分 -100以内 (不包含20,不包含100)
>20 <100
zrangebyscore math (20 (100
# 根据分数统计元素个数
zcount key 20 100
# 修改元素
zincrby key 20 moran # 添加分数
zincrby key -20 moran # 减少分数
# 根据排名删除
zremrangebyrank math 0 1 # 删除排名0到1 的元素
# 根据分数删除
zremrangebyscore math (20 100 #删除大于20-100
# 有序集合求交集 元素相同 分数相加
zinterstore 新集合名 2(表示2集合的交集) 集合1 集合2
zunionstore 新集合名 2(表示2集合的并集) 集合1 集合2