redis是为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。
后端启动
./redis-server redis.conf
打开命令行客户端
./redis-cli -h 127.0.0.1 -p 6379
正常关闭
./redis-cli shutdown
数据类型
1 String类型
赋值
set name zhangsan
取值
get name
赋多个值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"
数值增减
当存入的字符为整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。
incr num
增加指定的整数
相应的也有递减
decr num
向尾部追加值
APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
语法:APPEND key value
127.0.0.1:6379> set str hello OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str "hello world!"
获取字符串长度
STRLEN命令返回键值的长度,如果键不存在则返回0。
语法:STRLEN key
*127.0.0.1:6379> strlen str* *(integer) 0*
*127.0.0.1:6379> set str hello* *OK*
*127.0.0.1:6379> strlen str* *(integer) 5*
2 Hash类型
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。也就是说不能向HashSet一样里面还能存储别的set或者list类型,例如
赋值
hset user username zhangsan
然后查看一下具体的存储结构
可以发现类似于Java中的对象的结构,或者是json数据中的值
那么要是一次设置多个值呢,可以使用hmset
hmset user age 20 username lisi
那假如说要是有值救不赋值呢,使用hsetnx
hsetnx user age 30 //如果user中没有age字段则设置age值为30,否则不做任何操作
取值
取某一个值hegt key field
取多个值hmget key field [field …]
例如
删除
hdel可以删除一个或多个字段,例如
hdel user username
hdel user username password
3 list类型
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
向列表两端增加元素
//向左添加
lpush key value [value ...]
//向右添加
rpush key value [value ...]
查看列表
lrange命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
lrange item:1001 0 1
从两端弹出元素
LPOP命令从列表左边弹出一个元素,会分两步完成:
第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。
语法:
LPOP key
RPOP key
获取元素个数
语法:LLEN key
127.0.0.1:6379> llen list:1
(integer) 2
4 Set类型
集合中的数据是不重复且没有顺序。
增加
SADD key member [member ...]
取值
SMEMBERS key
判断元素是否在集合中
SISMEMBER key member