Redis初识
什么是Redis?
简单理解就是:Redis 是一个单进程的高性能的键值对的数据库;
关系型数据库和非关系型数据库最明显的区别?
(1)关系型数据库具有固定的表结构和数据;
(2)非关系型数据库不具有固定的表结构,一般只具有key-value键值对的存储结构;
1
Redis的核心特点:
Redis的服务器程序采用的是单进程模型来处理客户端的请求。对读写时间的响应是通过对
epoll函数的包装来做到的。
Redis的存储的数据类型原理分析:
1、 key 键的类型: String 类型; (字符串类型)
2、 value 值的类型: 分为五种:
2.1 String类型 ,
2.2 hsah 类型 ,
2.3 列表 list 类型 ,
2.4 无序集合 set 类型 ,
2.5 有序集合 zset 类型
2.1 String 类型(字符串类型)
字符串(String)是Redis的最基本的类型
Redis string最常用的一些命令
(1) set 命令
设置值 : set "key " "value"
设置过期时间: setex "key " "seconds" " value"
设置多个键值对: mset "key1" "value1" "key2" "value2" "key3" "value3" ....
设置追加值: append "key" "value"
(2) get 命令
获取值:
(1)get "key"(获取单个值); (2)get "key1" "key2"(获取多个值)
(3) del 命令
删除值:
(1)del "key"(删除某个值); (2)del "key1" "key2"(删除多个值)
(4) keys 命令
查找值: keys *
(5) exists 命令
判断键是否存在: exists “key” 返回1,存在 返回 0, 不存在
(6) type 命令
查看键对应的值的类型: type "key"
(7) expier 命令
设置键键过期: expire "key" " seconds"
(8) TTL 命令
TTL"key"
TTL以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
返回值:
当 key 不存在时,返回 -2 ;
当 key 存在但没有设置剩余生存时间时,返回 -1 ;
否则,以秒为单位,返回 key 的剩余生存时间。
2.2 Redis list 类型
list可以在头部和尾部插入一个新元素,其时间复杂度是常数级别的;
弊端是:元素定位比数组慢
Redis list类型的常用的命令:
(1)添加: lpush(leftPush 从左侧插入); rpush(rightPush 从右侧插入)
(2)获取
获取列表指定范围内的值:
语法:lrange key start stop
1. 索引从左侧开始,第一个值的索引为0;if : lrange key 0 -1
2. 索引可以是负数,表示从尾部开始计数,如-1表示最后一个值; if : lrange key 2 -1
3. tart,stop为要获取值的索引。
(3)修改
设置指定索引位置的值
语法:lset key index value
1. 索引从左侧开始,第一个值的索引为0; if: lset key 1 value
2. 索引可以是负数,表示从尾部开始,-1代表最后一个值。if: lrange key 0 -1
(4)删除
删除指定值
语法:lrem key count value
1. 将列表中前count次出现的值移除
2. count>0:从头往尾删除
3. count<0:从尾往头删除
4. count=0:删除所有值语法:lrem key count value
2.3 Redis set 类型
set 字符串,是通过HashTable实现的,是无序不可重复的
Redis set 类型的常用命令
(1)添加元素 sadd
不能重复但是可以设置多个值: sadd key value1 vlaue2....
(2) 获取集合种所有的元素
smembers key
(3) 判断元素是否在集合中
sismember key value
(4) 删除元素
srem key value
(5) 获取集合中元素的个数
scard key
(6) 将元素随机弹栈出去
spop key
(7)移动元素到一个新的数据库
smove key 1 key2 value
2.4 Redis hash 类型
按Hash方式来存放字符串
Redis hash类型的常用命令
(1) 设置单个值
hset key id vlue
hset key name vlue
(2)同时设置多个键值对
hmset key name value1 age vlue2
(3)获取 key 键下的所有的值
hgetall key
(4)获取单个key键值
hget key name / age
(5)同时获取多个key键值
hmget key id name age
(6)删除某一项
hdel key id / name / age
2.5 Redis zset类型(有序集合)
字符串Set,有序且不可重复,根据Score来排序。
score可以是整数,也可以是浮点数,还可以是+inf表示正无穷大,-inf表示负无穷大
Redis zset 类型的常用命令
(1) 添加元素
zadd key score1 value score2 value...
举例:
zadd test 10 12345 20 zhangsan 30 lisi 40 40.5
运行结果:
row value score
1 12345 10
2 zhangsan 20
3 lisi 30
4 40.5 40
(2)获取索引区间内的元素
zrange test 0-1 获取value组的值
zrange test 0-1 withscores 获取 value组和score组的值
(3)获取分数区间的元素
zrangebyscore test 0 20 获取 test>=0 && test<=20的区间的value值
zrangebyscore myzset 0 (20 获取 test>=0 && test<20的区间的value值
zrangebyscore myzset 0 (20 withscores
获取 test>=0 && test<20的区间的value值和score值
zrangebyscore myzset 20 +inf withscores
获取 test>=20 的value值和score值
zrangebyscore myzset (20 +inf withscores
获取 test>20 的value 值和score值
(4)删除元素
zrem test value 1 删除表中单个
zrem test value 1 value2 删除表中多个
zrangebyscore test 0 +inf withscores 获取表中大于0的所有键值对
(5)获取集合中元素个数
zcard test