学习目标:
1、了解Redis的基本命令介绍
学习过程:
1、赋值与取值
set key value 赋值
get key 取值
重点是这个set 值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
可选参数:
-
EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
-
PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
-
NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
-
XX :只在键已经存在时,才对键进行设置操作。
示例:
先启动并进入客户端
[root@run1 bin]# ./redis-server /etc/redis.conf
[root@run1 bin]# ./redis-cli
127.0.0.1:6379> get name
"liubao"
127.0.0.1:6379> ttl name # 查看剩余生存时间
(integer) -1
默认是-1表示永不过期。
#使用 EX 选项
127.0.0.1:6379> set expname "baobao" EX 5 # 设置过期时间为 5 秒
OK
127.0.0.1:6379> ttl expname # 查看剩余生存时间
(integer) 2
127.0.0.1:6379> get expname # 过期就会查询不到了
(nil)
#也可以使用EXPIRE 设置过期时间
redis> SET cache_page "www.google.com"
OK
redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒
(integer) 1
redis> TTL cache_page # 查看剩余生存时间
(integer) 23
redis> EXPIRE cache_page 30000 # 更新过期时间
(integer) 1
redis> TTL cache_page
(integer) 29996
# 使用 PX 选项
127.0.0.1:6379> set pxname "baobao" px 6000
OK
127.0.0.1:6379> pttl pxname
(integer) 4231
127.0.0.1:6379> get pxname
"baobao"
127.0.0.1:6379> get pxname
(nil)
# 使用 NX 选项
127.0.0.1:6379> set extkey "baobao"
OK # 键不存在,设置成功
127.0.0.1:6379> set extkey "abc" NX
(nil) # 键已经存在,设置失败
127.0.0.1:6379> get extkey
"baobao" # 原值没有修改成功
# 使用 XX 选项
127.0.0.1:6379> EXISTS exname
(integer) 0 #判断释放存在 并不存在
127.0.0.1:6379> set exname "hello" XX
(nil) # 因为键不存在,设置失败
127.0.0.1:6379> set exname "hello"
OK # 先给键设置一个值
127.0.0.1:6379> set exname "hello" XX
OK # 设置新值成功
127.0.0.1:6379> set exname "abc" XX
OK # 设置新值成功
127.0.0.1:6379> get exname
"abc" #取得最新设置的值
2、判断一个键值是否存在
exists key
如果存在,返回整数类型 1 ,否则返回 0
前面已经有示例了。
3、删除键
del key [key.....]
可以删除一个或多个键,返回值是删除的键的个数
注意:不支持通配符删除,但是可以同事删除多个。
示例:
127.0.0.1:6379> del exname
(integer) 1 #删除一个,并返回删除的个数
127.0.0.1:6379> del extkey name
(integer) 2 #同时删除两个
4、获得键值的数据类型
type key
返回值可能是 string(字符串类型) hash(散列类型) list(列表类型) set(集合类型) zset(有序集合类型)
127.0.0.1:6379> set name liubao
OK
127.0.0.1:6379> type name
string
5、递增数字
这个命令虽然只是简单的加1,但是因为redis 所有的命令都是原子性的,因为后台是单线程。我们可以不用考虑并发的问题,可以方便的利用其功能实现简单的计数器功能,我们可以用来序列号生成方案(高并发和数据一致性的保证,以及断电数据不丢失,分布式扩展能力等优势)等等。
incr key
当要操作的键不存在时会默认键值为 0 ,所以第一次递增后的结果是 1 ,当键值不是整数时 redis会提示错误
示例:
127.0.0.1:6379> SET viewcount 10
OK
127.0.0.1:6379> incr viewcount
(integer) 11
6、增加指定的整数
incrby key increment
incrby 命令与 incr 命令基本一样,只不过前者可以通过 increment 参数指定一次增加的数值如:
127.0.0.1:6379> incrby num 2
(integer) 2 #一次加2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incrby num 3
(integer) 5 #一次加3
127.0.0.1:6379> get num
"5"
7、减少指定的整数
decr key
decrby key increment
desc 命令与incr 命令用法相同,只不过是让键值递减
decrby 命令与 incrby命令用法相同
8、增加指定浮点数
incrbyfloat key increment
incrbyfloat 命令类似 incrby 命令,差别是前者可以递增一个双精度浮点数,如:
incrbyfloat num 2.7
注意: ( 受reids 版本限制,版本需要大于 2.6 版本)
9、向尾部追加值
append key value
作用是向键值的末尾追加 value ,如果键不存在则将改键的值设置为 value,即相当于 set key value。返回值是追加后字符串的长度
如:append foo " hello word!"
示例
127.0.0.1:6379> set name liu
OK
127.0.0.1:6379> append name bao
(integer) 6
127.0.0.1:6379> get name
"liubao"
10、获取字符串长度
strlen key
返回键值的长度,如果键不存在则返回0
127.0.0.1:6379> strlen name
(integer) 6
11、 同时 获得/设置 多个键值
mget key [key.....]
mset key value [key value .......]
前面已经有示例了。
12、keys 命令
注意这个命令已经不建议使用了,因为当redis中有很多key时,特别时keys *命令,很有可能会导致整个服务卡顿的,建议使用scan,这个我们后面再说。
查找所有符合给定模式 pattern 的 key 。
? 匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab","ac","ad"
\x 匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?
例如:
KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符号用 \ 隔开
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
示例:
redis> MSET one 1 two 2 three 3 four 4 # 一次设置 4 个 key
OK
redis> KEYS *o*
1) "four"
2) "two"
3) "one"
redis> KEYS t??
1) "two"
redis> KEYS t[w]*
1) "two"
redis> KEYS * # 匹配数据库内所有 key
1) "four"
2) "three"
3) "two"
4) "one"