运行
[root@localhost ~]# docker run -d -p 6379:6379 --name redis0708 redis:6.0.5
51e1a509b761bb3f263338cfe1399701f6efdca511a09a30d646c53380691c22
[root@localhost ~]# docker exec -it redis0708 /bin/bash //进入redis
root@51e1a509b761:/data# redis-cli
基本命令
127.0.0.1:6379> keys * //查看所有key
1) "name"
2) "age"
127.0.0.1:6379> exists name //查看key是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1 //将名为name的key移到数据库1中
(integer) 1
127.0.0.1:6379> select 1 //转到数据库1
OK
127.0.0.1:6379[1]> get name //获取名为name的key的value值
"liuliangcheng"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> expire name 10 //删除倒计时,单位秒
(integer) 0
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> expire age 10
(integer) 1
127.0.0.1:6379> ttl age //查看属于时间
(integer) 7
127.0.0.1:6379> ttl age
(integer) 3
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> type name //查看名为name的key的数据类型
string
127.0.0.1:6379> flushdb //删除当前数据库所有信息
OK
127.0.0.1:6379> flushall //删除所有数据库信息
OK
127.0.0.1:6379> set name liu
OK
127.0.0.1:6379> get name
"liu"
127.0.0.1:6379> append name lalal //在名为name的key的value后追加字符串,如果name不存在就会自动添加一个,等同于set name lalal
(integer) 8
127.0.0.1:6379> get name
"liulalal"
127.0.0.1:6379> strlen name //查看名为name的key的value的长度
(integer) 8
127.0.0.1:6379> append name ,menghuanwangguo
(integer) 24
127.0.0.1:6379> get name
"liulalal,menghuanwangguo"
i++
步长i+=
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views //自增1
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views //自减1
(integer) 1
127.0.0.1:6379> incrby views 10 //设置步长,指定增长量
(integer) 11
127.0.0.1:6379> decrby views 10 //设置步长,指定减少量
(integer) 1
字符串范围
//筛选
127.0.0.1:6379> set name hello,liangcheng //设置name的值
OK
127.0.0.1:6379> get name
"hello,liangcheng"
127.0.0.1:6379> getrange name 0 3 //截取字符0-3
"hell"
127.0.0.1:6379> getrange name 0 -1 //获取全部字符串和get key是一样的
//替换
"hello,liangcheng"
127.0.0.1:6379> setrange name 0 shuai //替换指定位置的字符串
(integer) 16
127.0.0.1:6379> get name
"shuai,liangcheng"
单个设置
setex (set with expire ) #设置过期时间
setnx (set if not exist ) #不存在再设置 (再分布式锁中会常常使用!)
127.0.0.1:6379> setex name1 30 iloveyou //创造name1 ,设置倒计时为30秒
OK
127.0.0.1:6379> get name1
"iloveyou"
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl name1
(integer) 10
127.0.0.1:6379> setnx name binggo //如果 name 不存在,创建失败
(integer) 0
127.0.0.1:6379> get name1
(nil)
127.0.0.1:6379> setnx name1 binggo //如果 name 不存在,创建name
(integer) 1
127.0.0.1:6379> get name1
"binggo"
批量设置
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 //同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3 //同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k4 v4
(integer) 1
127.0.0.1:6379> msetnx k1 v1 k5 v5 //msetnx是一个原子性的操作,要么一起成功,要么一起失败
(integer) 0
对象
set user:1 {name:zhangsan,age:3} //设置一个user:1 的对象
127.0.0.1:6379> mset id:1:name lcer id:1:age 2 //user:{id}:{filed},这样的设计再redis中是完全可以的
OK
127.0.0.1:6379> mget id:1:name id:1:age
1) "lcer"
2) "2"
127.0.0.1:6379> keys *
1) "id:1:name"
2) "id:1:age"
/*****************************/
127.0.0.1:6379> getset db lcer //如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get db
"lcer"
127.0.0.1:6379> getset db abc //如果存在值,获取原来的值,并设置新的值
"lcer"
127.0.0.1:6379> get db
"abc"
String类似的使用场景:value除了是我们的字符串还可以是我们的数字!
1、计数器
2、统计多单位的数量
3、粉丝数
4、对象缓存存储