目录
1.定义
Redis 是一个高性能的key-value数据库,key是字符串类型。
2.核心特点:
(1)单进程:
Redis的服务器程序采用的是单进程模型来处理客户端的请求。对读写时间的响 应是通过对epoll函数的包装来做到的。
3.数据类型:
键的类型是字符串 |
值的类型分为五种: 字符串string,哈希hash,列表list,无序集合set;有序集合zset |
1.string类型
(1)简介
字符串(string)是Redis最基本的类型,可以存储String,Integer,Float型的数据,甚至是二进制数据,一个字符串最大容量是512M |
(2)set命令
set 键值 》如果键不存在,就是添加 》如果键存在,就是修改 (1)设值取值 set name zs set name lisi (2)设置过期时间 setex name2 3 wangwu
mset key1 value1 key2 value2 key3 value3
append key value |
(3)get命令
get key1
mget key1 key2 |
(4)del命令
del key1
del key1 key2 |
(5)keys命令(查找键)
mset u1 aa u2 bb u3 cc keys * |
(6)exists命令(判断键是否存在)
如果存在返回1,不存在返回0 exists key |
(7)type命令(查看键对应值的类型)
type key |
(8)expire命令(设置键过期时间)
expire key seconds 案例: set name zz expire name 5 get name------------>(等一会儿..) get name |
(9)TTL 命令(查看键有效时间)
TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 返回值: 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。 |
2.list类型
(1)简介
(1)列表中的值(value)类型为字符串; (2)字符串List,底层实现上不是数组,而是链表,也就是说在头部和尾部插入一个新元素,其时间复杂度是常数级别的;其弊端是:元素定位比数组慢 |
(2)添加
从左侧插入值: lpush key value1 value2 从右侧插入值: rpush key value1 value2 |
(3)获取
返回列表里指定范围内的值
语法:lrange key start stop 例如: (1)获取列表所有值 lrange key 0 -1 (2)从第三个元素开始获取到最后的值 lrange key 2 -1 实战: lpush name 1 2 3 rpush name 4 5 6 lrange name 0 -1 lrange name 2 -1 |
(4)修改
设置指定索引位置的值 (1)索引从左侧开始,第一个值的索引为0; (2)索引可以是负数,表示从尾部开始,-1代表最后一个值。 语法:lset key index value 实战: lset name 1 aa lrange name 0 -1 |
(5)删除
删除指定值
语法:irem key count value (1)实战: rpush born2 0 1 2 3 4 5 0 1 2 1 0 1 0 2 3 4 1 0 1 1 2 (2)查询列表 lrange born2 0 -1 (3)案例2:从键列表右侧开始删除1个2 lrem born2 -1 2 (4)查询列表 lrange born2 0 -1 (5):从键列表左侧开始删除2个2 lrem born2 2 2 (6)查询列表 lrange born2 0 -1 |
3.set类型
(1)简介
字符串Set,无序不可重复,是通过HashTable实现的。 |
(2)实战
1.sadd:添加元素,格式是SADD KEY_NAME VALUE1..VALUEN |
127.0.0.1:0>sadd myset v1 |
2.smembers:获取集合中所有元素,格式是SMEMBERS key |
127.0.0.1:0>smembers myset #查询myset中的值有哪些 |
3.sismember:判断元素是否在集合中,格式是SISMEMBER KEY VALUE |
127.0.0.1:0>sismember myset v1 |
4.srem:删除元素,格式是SREM KEY MEMBER1..MEMBERN |
127.0.0.1:0>srem myset v1 127.0.0.1:0>srem myset v1 127.0.0.1:0>smembers myset |
5.scard:获取集合中元素个数,格式是SCARD KEY_NAME |
127.0.0.1:0>scard myset |
6.spop:弹出元素,格式是SPOP key [count] |
127.0.0.1:0>spop myset 127.0.0.1:0>smembers myset |
7.smove:移动元素,格式是SMOVE SOURCE DESTINATION MEMBER |
sadd myset v1 v2 v3 smembers myset smove myset myset2 v3 smembers myset smembers myset2 |
4.Hash哈希类型
(1)简介
按Hash方式来存放字符串 |
(2)实战
1.设置值,格式是HSET KEY_NAME FIELD VALUE 案例: 127.0.0.1:0>hset myhash id 123 "1" "1" 2.hmset:同时设置多对值,格式是HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN 案例: hmset myhash name 322 age 8 3.hgetall:获取该key下所有的值,格式是HGETALL KEY_NAME 案例: 127.0.0.1:0>hgetall myhash 1) "id" 2) "123" 3) "name" 4) "321" 5) "age" 6) "8" 4.hget:获取单个key的值,格式是HGET KEY_NAME FIELD_NAME 127.0.0.1:0>hget myhash name "321" 5.hmget:同时获取多个值,格式是HMGET KEY_NAME FIELD1...FIELDN 案例: 127.0.0.1:0>hmget myhash id name age 1) "123" 2) "321" 3) "8" 6.hdel:删除某个项,格式是HDEL KEY_NAME FIELD1.. FIELDN 127.0.0.1:0>hdel myhash id "1" 1) "name" 2) "321" 3) "age" 4) "8" |
5.zset类型(有序集合)
(1)简介
字符串Set,有序且不可重复,根据Score来排序。 |
(2)实战
1. zadd:添加元素,格式是ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN,score和项可以是多对,score可以是整数,也可以是浮点数,还可以是+inf表示正无穷大,-inf表示负无穷大 案例: zadd myzset 10 v1 zadd myzset 10 v1 20 v2 30 v3 zadd myzset 9 v1 20 v2 30 v3 |
2. zrange:获取索引区间内的元素,格式是ZRANGE key start stop [WITHSCORES] 案例: zrange myzset 0 -1 zrange myzset 0 -1 withscores |
3. zrangebyscore:获取分数区间内的元素,格式是ZRANGEBYSCORE key min max [WITHSCORES] 案例: zrangebyscore myzset 0 20 #代表大于等于0,小于等于20 zrangebyscore myzset 0 (20 #代表大于等于0,小于20 zrangebyscore myzset 0 (20 withscores #代表大于等于0,小于20,带分数 zrangebyscore myzset 20 +inf withscores #代表大于等于20,带分数 zrangebyscore myzset (20 +inf withscores #代表大于20,带分数 |
4. zrem:删除元素,格式是ZREM key member [member ...] 案例: zrem myzset v1 v2 #删除v1,v2 zrangebyscore myzset 0 +inf withscores #获取所有的大于0的值和分数 |
5. zcard:获取集合中元素个数,格式是ZCARD KEY_NAME 案例: zcard myzset |
*关系型数据库和非关系型数据库最明显的区别:
关系型数据库具有固定的表结构
非关系型数据库不具有固定的表结构,一般只具有key-value键值对的存储结构
*面试题2:redis存储的数据类型有几种?
key只有一种是string类型,而value有5种类型:1.string类型2.list类型 3.set类型 4.hash类型
5.zset类型