Redis,定义、各数据类型增删改查
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 (2) 设置多个键值对 mset key1 value1 key2 value2 key3 value3 (3) 追加值 append key value
|
(3) get命令
(1) 获取单个值 get key1 (2) 获取多个值 mget key1 key2 |
(3) del命令
(1) 删除某个键 del key1 (2) 删除多个键 del key1 key2 |
(4)keys命令(查找键)
mset u1 aa u2 bb u3 cc keys * |
(5)exists命令(判断键是否存在)
如果存在返回1,不存在返回0 exists key |
(6)type命令(查看键对应值的类型)
type key |
(7)expire命令(设置键过期时间)
expire key seconds
案例: set name zz expire name 5 get name------------>(等一会儿..) get name |
(8)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) 获取
返回列表里指定范围内的值 (1) 索引从左侧开始,第一个值的索引为0; (2) 索引可以是负数,表示从尾部开始计数,如-1表示最后一个值; (3) start,stop为要获取值的索引。 语法: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)删除
删除指定值 (1) 将列表中前count次出现的值移除 (2) count>0:从头往尾删除 (3) count<0:从尾往头删除 (4) count=0:删除所有值 语法:lrem 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)实战
案例: 127.0.0.1:0>hset myhash id 123 1 1
案例: hmset myhash name 322 age 8
案例: 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 |