Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
#set <key> <value>添加键值对,get <key>询对应键值 127.0.0.1:6379> set k "www.baidu.com" #将www.baidu.com存储到k值 OK 127.0.0.1:6379> get k #查看key值对应的值 "www.baidu.com" 127.0.0.1:6379>
2、key命令(查看所有的key值):
127.0.0.1:6379> keys * #查看所有的key值 1) "age" 2) "k" 3) "name" 127.0.0.1:6379>
3、exists命令(判断某个key是否存在):
#语法:exists key #判断key值是否存在,存在返回1,不存在返回0。 127.0.0.1:6379> keys * #查看所有的key值 1) "age" 2) "k" 3) "name" 127.0.0.1:6379> exists age #判断key值为age是否存在,存在返回1, (integer) 1 127.0.0.1:6379> exists www #判断key值为www是否存在,不存在返回0 (integer) 0 127.0.0.1:6379>
4、append 将给定的value追加到原值的末尾(类似java里面String的append方法)
#语法 append <key><value> 127.0.0.1:6379> keys * #查看当前库的所有key值 1) "age" 2) "k" 3) "name" 127.0.0.1:6379> get name #获取key为name的value值。 "zhangsan" 127.0.0.1:6379> append name " is my friend" #在zhangsan后面追加 is my friend (integer) 21 127.0.0.1:6379> get name #再次获取key为name的value值 "zhangsan is my friend" 127.0.0.1:6379>
5、strlen 获得key对应值的长度
127.0.0.1:6379> keys * #获取所有的key值 1) "age" 2) "k" 3) "name" 127.0.0.1:6379> get name "zhangsan is my friend" 127.0.0.1:6379> strlen name #查看name对应的value的长度,即value值的长度 (integer) 21 127.0.0.1:6379>
6、setnx <key>
<value>
只有在 key 不存在时 设置 key 的值
#语法:etnx <key><value> 只有在 key 不存在时 设置 key 的值 127.0.0.1:6379> keys * 1) "age" 2) "k" 3) "name" 127.0.0.1:6379> get k "www.baidu.com" 127.0.0.1:6379> setnx k "lisi" #先判断是否存在K,存在返回0,不修改value值 (integer) 0 127.0.0.1:6379> setnx k1 "lisi" #判断是否存在k1,不存在返回1,修改value值为 "lisi" (integer) 1 127.0.0.1:6379> keys * #查看所有的key,新创建一个k1 1) "age" 2) "k" 3) "k1" 4) "name" 127.0.0.1:6379> get k1 #获取k1的值,验证 "lisi" 127.0.0.1:6379>
7、incr <key>
将 key 中储存的数字值增1 只能对数字值操作,如果为空,新增值为1
127.0.0.1:6379> keys * #当前数据库为空 (empty array) 127.0.0.1:6379> set age 12 #存值 OK 127.0.0.1:6379> incr age #让age加一 (integer) 13 #看到返回结果为13 127.0.0.1:6379> keys * 1) "age" 127.0.0.1:6379> incr name #创建一个新的key值为name,并且value值为1 (integer) 1 127.0.0.1:6379>
原子操作:对incr <key>
实行原子性操作。
所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
(1)在单线程中, 能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。
(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。
原子操作主要得益于redis的单线程。
8、incr <key>
将 key 中储存的数字值减1 只能对数字值操作,如果为空,新增值为-1
127.0.0.1:6379> keys * 1) "age" 127.0.0.1:6379> get age "13" 127.0.0.1:6379> decr age #年龄减一 (integer) 12 127.0.0.1:6379> decr name #创建一个新的key值为name,并且value值为-1 (integer) -1 127.0.0.1:6379>
9、incrby <key>
<步长> 将 key中存储的数字值增加指定的步长
127.0.0.1:6379> set views 1 #新增一个String OK 127.0.0.1:6379> incrby views 10 #在原来的基础上增加10 (integer) 11 127.0.0.1:6379> get views "11" 127.0.0.1:6379> incrby test 10 #若不存在test,新建test,初始值为0加上步长10 (integer) 10 127.0.0.1:6379> get test "10" 127.0.0.1:6379>
10、decrby <key>
<步长> 将 key中存储的数字值减少指定的步长
127.0.0.1:6379> keys * 1) "views" 2) "test" 127.0.0.1:6379> get views "11" 127.0.0.1:6379> decrby views 10 #在原来的基础上减少10 (integer) 1 127.0.0.1:6379> decrby ww 10 #初始默认为0,减少10 (integer) -10 127.0.0.1:6379>
11、Mset 命令用于同时设置一个或多个 key-value 对。
127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 #进行设置多个值 OK 127.0.0.1:6379> keys * 1) "k2" 2) "k4" 3) "k3" 4) "k1" 127.0.0.1:6379>
12、Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
127.0.0.1:6379> keys * 1) "k2" 2) "k4" 3) "k3" 4) "k1" 127.0.0.1:6379> mget k1 k2 k6 #k6不存在,返回null 1) "v1" 2) "v2" 3) (nil) 127.0.0.1:6379>
13、Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
127.0.0.1:6379> set name "hello,redis world" #设置字符串 OK 127.0.0.1:6379> get name "hello,redis world" 127.0.0.1:6379> getrange name 0 5 #截取范围0-5的字符串 "hello," 127.0.0.1:6379> getrange name 0 -1 #查看字符串,相当于get <key> "hello,redis world" 127.0.0.1:6379>
14、Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始到结束。
127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> get name "hello,redis world" 127.0.0.1:6379> setrange name 12 study #覆盖偏移量之后所有字符串 (integer) 18 127.0.0.1:6379> get name "hello,redis studyd" 127.0.0.1:6379>
15、命令用于设置指定 key 的值,并返回 key 旧的值。
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> getset name lisi #获取原来的值,并将新的值存入当前key对应的value。 "zhangsan" 127.0.0.1:6379> get name "lisi" 127.0.0.1:6379>