一、 基本介绍
Redis是一个开源(BSD许可的),内存中的数据结构存储系统,它可以用作
数据库、缓存和消息中间件MQ,支持多种类型的数据结构,如String、sets、lists、sorted sets(有序集合)等。Redis内置了复制,LUA脚本,LRU驱动事件,事务和不同级别的 磁盘持久化,并通过Redis哨兵模式(Sentinel)和自动区分(Cluster)和提供高可靠型。
六大数据类型
Redis-Key
String
List
Set
Hash
Zset
三种特殊数据类型
geospatial
hyperloglog
bitmaps
二、数据类型详解(Redis不区分大小写)
1.Redis-Key
keys *:代表查看数据库的所有的值key
清空命令:
flushdb(清除当前数据库),
FLUSHALL(清空所有数据库)
(
EXISTS---判断文件是否存在),存在的时候(integer)1;不存在的时候(integer)0
(
remove-------移除文件),移除成功(integer) 1;
(
EXPIRE name 20-----倒计时20后name过期),用ttl name 查看还有多少时间过期
(
type----查看文件类型)
2.String类型
APPEND key,往字符串后面追加某样东西,如果当前key不存在,相当于setkey
STRLEN key 获取字符串长度
“
incr”+1操作,自增1。"
decr" -1操作,自减1
"
INCRBY" 增加某个步长
"
DECRBY"减少某个步长
获取某一小段字符串"
GETRANGE",比如“GETRANGE key 0 3”截取0-3长度的字符子串,再比如"
GETRANGE key 0 -1 "获取整个字符串(此时和get key一样)
修改字符串中的某一个值
"
SETRANGE key1 1 ww" ,其中“1”是修改的位置,"ww"是要替换的字符
"
setex(set with expire)":设置过期时间
"
setnx(set if not exist)":不存在再设置(在分布式锁中可以常常使用)
解释:设置文件key2 在30秒后过期;setnx 如果当前文件存在则设置不了新的文件,否则可以设置
"
mset":同时设置多个值
"
mget":同时获取多个值
"msetnx":是一个原子性操作,要么一起成功,要么一起失败,如图所示,因为k1文件已经存在,虽然k4不存在,但是设置失败
set user:1{name:zhangsan,age:3} 设置一个user:1 对象 ,值为jason字符来保存一个对象
user:{id}:{filed}的用法可以在Redis使用
getset:先get再set
3、List列表类型
所有的List命令都是用l开头的
LPUSH list one :将一个值或者多个值,插入到列表头部
LRANGE list 0 -1 :列出所有元素
Rpush :将一个值或者多个值,插入到列表尾部
Lpop list :移除列表的第一个元素
Rpop list:移除列表的最后一个元素
Lindex list 1:获取下标为1的某一个值
Llen :返回列表的长度
移除指定的值(List中可以存放重复元素)
lrem list 1 three 移除1个three
lrem list 2 three 移除2个three
ltrim: 修建字符串,截断了只剩下截取的元素
rpoplpush:移除列表的最后一个元素,并移动到新的列表中,比如:
rpoplpush mylist anotherlist :将mylist中的最后一个元素移除,放到anotherlist列表中的第一个元素
lset:将列表中指定的下标的值替换为另外一个值,更新操作
lset list 0 item :将list中下标为0的元素替换成item
注意:要先看列表是否存在,
此时下标为0的元素一定要存在,否则出现错误,这时Lpush list value1 ,再进行替换就不会报错
lset list 1 other :此时不存在该下标,报错
linsert:将某个具体的value插入到列表 中的某个元素的前面或者后面
总结:
-
他实际上是一个链表,before Node after ,left, right.都可以插入值
-
如果key值不存在,创建新的链表
-
如果key存在,新增内容
-
如果移除了所有值,空链表,也代表不存在
-
在两边插入或者改动值,效率最高
4.Set(集合)
set中的值都是不能重读的,没有顺序的
sadd myset "hello" : setset集合中添加元素hello
smembers : 查看指定set的所有值
sismember:判断某一个的值是不是在set集合中
scard myset:获取当前元素的值
比如:
127.0.0.1:6379> scard myset
(integer) 5 (当前集合中元素个数5个)
127.0.0.1:6379>
srem myset hello :移除set集合中的指定元素(第一个SMEMBERS少打了一个s)
SRANDMEMBER myset : 从集合中随机抽取一个元素
集合中随机抽取两个元素如下所示:
spop myset :随机移除元素 或者 spop myset 2:随机移除两个元素
smove myset myset2 "vv" :将“vv”从myset 中 移动到 myset2
差集、交集、并集
SDIFF key1 key2:差集
SINTER key1 key2:交集
SUNION key1 key2:并集
5.Hash(哈希)
Map集合、key-map 时候这个值是一个map集合,实际上和String类型没有很大区别,还是一个简单的key-value
hset myhash field1 vv :set一个具体的key-value
hget myhash field1 :获取一个字段值
hset myhasn field1 hello field2 world :set多个 key-value
hgetall myhash :获取多个字段值
hdel myhash field1:删除hash指定key字段,对应的value也会删除
再把值添加,hlen :获取表的字段数量
HEXISTS myhash field :判断hash表中指定字段是否存在,存在返回1,不存在返回0
HINCRBY:指定增量
hsetnx :如果不存在字段则不可以设置,反之可以设置
hash变更的数据user name age 尤其是用户的经常变动的信息。所以hash更适合对象的存储,而不是String,String类型的也可以存对象
6.Zset(有序集合)
在set的基础上,增加了一个值,set k1 v1 zset k1 score v1
排序如何实现?
zadd salary 2500 hong (键值对)
ZRANGEBYSCORE salary -inf +inf: 在 -inf 和 + inf 范围内排序
ZRANGEBYSCORE salary -inf +inf withscores: 带上scores的排序
ZREVRANGE salary 0 -1 :从大到小进行排序
还可以调整上下区间的范围: -inf 2500
zrem :移除有序集合中的指定元素
zcard :获取集合中的个数
zcount :获取有序区间的集合个数
总结:zset 排序可以用来存储班级成绩表,工资排序表。