redis数据类型
string
1. 设置单个字符串数据
set 设置的数据没有额外操作时,是不会过期的。
语法:set key value
例如:设置键为name
值为xiaoming
的数据,如果name存在,则表示修改name的值,如果name不存在,则表示添加一个key为name,value为"xiaoming"。
set name xiaoming
2.设置多个字符串类型的数据
语法:
mset key1 value1 key2 value2 ...
例如:设置键为
a1
值为python
、键为a2
值为java
、键为a3
值为c
mset a1 python a2 java a3 c
3.字符串拼接值
append的key如果不存在,则相当于set添加了一个字符串数据。
语法:append key value
例如:向键为
a1
中拼接值haha
append title "我的"
append title "redis"
append title "学习之路"
4.根据键获取字符串的值
根据键获取值,如果不存在此键则返回
nil
,相当于python的None
语法:get key
例如:获取键
name
的值
get name
5.根据多个键获取多个值
语法:
mget key1 key2 ...
例如:获取键
a1、a2、a3
的值
mget a1 a2 a3
6.自增自减
set num 1
incr num # 相当于num+=1
get num # 2
incr num # 相当于num+=1
get num # 3
set goods:10 100
decr goods:10 # 相当于 goods:10-=1
get goods:10 # 99
decr goods:10 # 相当于goods:10-=-1
get goods:10 # 98
7.获取字符串的长度
set name xiaoming
strlen name # 8
8.比特流操作
使用场景:签到记录、布隆过滤器(防止缓存击穿的一种防范手段)、打卡记录、心跳检测。
命令 | 描述 |
---|---|
BITCOUNT | 统计字符串的值被设置为1的bit数. |
BITPOS | 返回字符串里面第一个被设置为1或者0的bit位。 |
SETBIT | 设置一个bit数据的值 |
GETBIT | 获取一个bit数据的值 |
# 假设做一个签到功能,记录用户一年内的所有签到次数。
# 签到,id为1的用户2022年第7天签到
setbit user:1:checkin:2022 7 1
# 00000001
# 查询,用户1在2022年第7天是否上班
getbit user:1:checkin:2022 7
# 1
# 查询,用户1在2022年第3天是否上班
getbit user:1:checkin:2022 3
# 0
# 补签,用户1在2022年第4天补签
setbit user:1:checkin:2022 4 1
# 00001001
# 签到,用户1在2022年第15天签到
setbit user:1:checkin:2022 15 1
# 0000100100000001
# 统计,用户1在2022年一共签到了多少天
bitcount user:1:checkin:2022
# 3
# 查询,首次签到是什么时候
bitpos user:1:checkin:2022 1
# 4
key操作
redis中所有的数据都是通过key(键)来进行操作,这里是一些关于任何数据类型都通用的命令。
a.查找键
参数支持简单的正则表达式:
keys pattern
查看所有键:keys *
例如:
# 查看名称中包含`e`的键
keys *e*
# 查看以n开头的键
keys n*
# 查看以数字结尾的键
keys *[1-9]
# 查看2022年所有用户的签到记录的key列表
keys user:*:checkin:2022
b.设置键值的过期时间
redis中可以对一切的数据进行设置有效期,不仅是string,还包括其他的四种数据类型。
语法:setex key seconds value
例如:设置键为name
值为xiaoming
过期时间为20秒的数据
setex name 20 xiaoming
c.查看键的有效期
语法:
ttl key
- 结果是秒作为单位的整数
- -1 表示永不过期
- -2 表示当前数据已经过期,查看一个不存在的数据的有效期就是-2
d.设置key的有效期
给已有的数据重新设置有效期,redis中所有的数据都可以通过expire来设置它的有效期。
语法:expire key seconds
例如:设置一个hash数据的有效期为30秒
hset person:1 name xiaoming age 17
expire person:1 30
ttl person:1
# 30
e.判断键是否存在
- 在redis中如果key没有被设置或者过期了,则key不存在。
- 可以使用
exists key
来判断,如果存在返回1
,不存在返回0
例如:判断键title
是否存在
exists title
f.查看键的数据类型
语法:
type key
- none 空,当前数据不存在
- string 字符串
- hash 哈希类型
- list 列表类型
- set 无序集合
- zset 有序集合
g.查看键的值数据类型
set name xiaoming
type name
# string
sadd member_list xiaoming xiaohong xiaobai
# (integer) 3
type member_list
# set
hset user_1 name xiaobai age 17 sex 1
# (integer) 3
type user_1
# hash
lpush brothers zhangfei guangyu liubei xiaohei
# (integer) 4
type brothers
# list
zadd achievements 61 xiaoming 62 xiaohong 83 xiaobai 78 xiaohei 87 xiaohui 99 xiaolong
# (integer) 6
type achievements
# zset
h.key重命名
改变key的名称,但是不会修改值。
语法:rename 旧的key 新的key
例如:把name重命名为username
set name xioaming
rename name username
get username
i.删除键以及键对应的值
删除key表示可以删除任意类型的数据。
语法:del key
# 删除一个key
del name
# 删除多个key
del title num
j.清空所有key
慎用,一旦执行,则redis所有数据库0~15的全部key都会被清除
语法:flushall
k.select切换数据库
redis的配置文件中,默认有0~15之间的16个数据库,默认操作的就是0号数据库
语法:select <数据库ID>
# 默认处于0号库
127.0.0.1:6379> select 1
OK
# 这是在1号库
127.0.0.1:6379[1]> set name xiaoming
OK
127.0.0.1:6379[1]> select 2
OK
# 这是在2号库
127.0.0.1:6379[2]> set name xiaohei
OK