redis学习笔记
来源:互联网 发布:java序列化 编辑:程序博客网 时间:2024/06/16 11:45
redis的数据类型
五种数据类型
1.字符串类型
一个键最多存储512MB
1》SET :设置key对应的值为value
语法:SET key value [EX seconds][PX milliseconds][NX|XX]
EX seconds:设置键的key的过期时间SET key value EX seconds == SETEX
PX millseconds:以毫秒设置key的过期时间SET key value PX milliseconds ==PSETXT
NX:只有键不存在的时候才可以设置成功SET key value NX ==SETNX
XX:只有键存在的时候才设置
SET test17 "this is a test16" EX 100
SET test18 "this is a test18" PX
SET test19 "" EX 100 NX(组合)
注意:如果key存在,同名会产生覆盖,PX和EX同时存在的时候,后面的值会覆盖前面的值
2》GET:根据key找到对应的值
语法:GET key
注意:如果key不存在,返回nil
如果key不是字符串,会报错
3》GETRANGE:返回字符串中的一部分
语法:GETRANGE key start end
start和end和python一样支持负数,但是不同点是包含end
4》GETSET:设置指定key的值,并且返回旧的值
语法:GETSET key value
注意当key不存在返回nil
如果key不实字符串,会报错
5》MSET
语法:MSET key value [key value...]
6》MGET
语法: MGET key1 key2
7》STRLEN:获取字符串长度
语法:STRLEN key
注意:对于不存在的key获取其长度返回的0
8》SETRANGE:相当于字符串替换的效果
语法:SETRANGE key offset value
注意:如果设置的key原来的字符串要比偏移量小,就会以零子节(\x00)来替换
9》 GETRANGE:返回字符串中的一部分
语法:GETRANGE key start end
10》 SETNX:只有key不存在的时候才能设置成功感
语法:SETNX key value
11》SETEX:设置key并且设置其过期时间
语法:SETEX key seconds value
注意:过期时间以秒为单位可以使用TTL key 查看键过期时间,SETEX是原子性操作,相当于执行了set key value ,又对这个key设置了过期时间expire key seconds
SETEX expireStr 69 'testExpire'
12》MSETNX:依次设置多个key-value对,只有所有的key都不存在的时候才会成功
语法:MSETNX key value [key value]
13》PSEXEX:以毫秒为单位设置key的生存周期
语法:PSETEX key milliseconds value
PSETEX test16 2000 ‘hello world’
注意:通过PTTL查看key的剩余时间
14》INCR:对key中存储的数字+1
语法:INCR key
SET counter 1
INCR counter
注意:key如果不存在,则会先初始化为0,然后接着计数
如果key存储的不是数字,会报错
15》INCR BY:将key中存储的数字加上制定增量
SET counter2 10
INCR BY counter2 5
16》INCRBYFLOAT:给key中存储的数字加上指定的浮点数
语法:INCREBYFLOAT key increment
SET counter3 1
INCRBYFLOAT counter3 1.2
16》DECR :将key中存储的数字减1
语法:DECR key
DECR counter3
17》DECRBY:将key中存储的数值减去指定的值
DECRBY key decrement
DECRBY counter2 2
18》APPEND:可以通过APPEND将值追加到字符串的末尾
语法:APPEND key value
注意:如果key不存在,则相当于SET操作
2.HASH类型
特别适用于存储对象,hash存储一个对象占用内存更少
在配置文件中可以通过配置
hash-max-ziplist-entries 512 512字节
hash-max-ziplist-value 64 字段数目
1》HSET:将哈希表key中域field设置成指定的value
语法:HSET key field value
HSET userinfo1 username "king"
HSET userinfo1 password "123456"
HSET userinfo1 email "sadadad@qq.com"
注意:如果哈希表中key中field不存在,相当于新建一个field,设置返回成功1
如果哈希表中key中field存在,相当于重新赋值,成功返回0
2》HGET:返回哈希表中key中给定field的值
语法:HGET key field
注意:如果key中field不存在,返回的是nil
3》HSETNX:将hash表中的域field设置成指定呃值,只有field不存在的时候才可以成功
如果filed存在,则操作无效
语法:HSETNX key field value
HSETNX testHash1 test ‘a’
4》HMSET:通过将多个field-value设置到hash表key中
语法:HMSET key field value field value
5》HMGET:一次获得hash表中key中多个field的值
语法:HMGET key field field
注意:如果hash表key中field不存在,会返回nil
6)HGETALL:返回hash表key中所有的field和value
语法:HGETALL key
HGETALL userInfo2
7》HKEYS:返回hash中key的所有的field
语法:HKEYS key
HKEYS userinfo2
8》HVALS:返回hash中key中国field所有的对应的值
语法:HVALS key
9》HEXISTS:检测hash中field是否存在
语法:HEXISTS key filed
10》HLEN:返回hash表key中field的数量
语法:HLEN key
HLEN userinfo2
11》HINCRBY:给hash中key的filed做增量操作
语法:HINCRBY key field increment
HSET userInfo3 age 12
HINCRBY userinfo3 age 10
12》HINCRBYFLOAT:给hash中key的field做增量浮点操作
语法:HINTCRBYFLOAT key field increment
HSET userInfo3 salary
13》HDEL:删除hash中key的指定域,可以删除一个也可以删除多个
语法:HDEL key field field
HGETALL userinfo2
HDEL userinfo2 username password
3.List类型
1》LPUSH:向列表左端添加元素
语法:LPUSH key value value...
LPUSH testList1 a b c
LPUSH myList1 0 -1
2》RPUSH:向列表右端添加元素
语法:RPUSH key value value...
RPUSH myList1 test1 test2 test3
3》LPUSHX:向列表头头部添加元素,只有key存在在来添加
语法:LPUSHX key value
LPUSHX myList2 a
4》RPUSHX:向列表尾部添加元素,只有key存在在来添加
语法:PRUSHX key value
5》LPOP:将列表头部的元素弹出
语法:LPOP key
6》RPOP:弹出列表尾部的元素
语法:RPOP key
RPOP myList1
7》LLEN:得到列表的长度
语法:LLEN key
LLEN myList2
8》LRANGE:返回获取列表片段
语法:LRANGE key start stop
LRANGE myList 0 -1
注意:
如果start下标比列表的最大下标end大,返回空列表
如果stop比列表长度大,返回整个列表
9》LREM:删除列表中指定的值
语法:LREM key count value
count 值有一下几种:
count>0:从列表的头开始,向胃部搜索,移除与value
相等的元素,移除count个
count<0:从列表尾部向头搜索,移除与value
相等的元素,移除count个
count=0,移除列表中所有与value相等的值
LPUSH myList2 a b c d
10》LINDEX:获取指定索引元素的值
语法:LINDEX key index
11》LSET:设置指定索引元素的值
LINDEX myList2 -3
LINDEX myList2 1000
12》LSET:设置指定索引元素的值
语法:LSET key index value
LSET myList2 0 king
12》LTRIM:只保留列表的片段
语法:LTRIM key start stop
LPUSH myList3 log1 log2 log3 log4 log5
LTRIM myList3 0 1
LTRIM myList4 1000 2000 列表被清空
LTRIM myList4 2000 1000 列表被清空
13》LINSERT :向列表插入元素
语法:LINSERT key BEFORE|AFTER pivot value
LPUSH myList5 a b c d
LINSERT myList5 BEFORE 'b' 'king'
LRANGE myList5 0 -1
LINSERT myList5 before b queen
14》RPOPPUSH:将元素从一个列表转到另外一个列表
过程属于一个原子性操作,源列表和目的列表是同一个列表时
语法:RPOPLPUSH source destination
LPUSH myList6 a b c
LPUSH myList7 x y z
RPOPLPUSH myList6 myList7
15》 BLPOP:BLPOP时LPOP的阻塞版本
语法:BLPOP key[key...] timeout
4.Set集合类型:无序集合
内部通过hash表实现,自动调整大小。
1》SADD:向集合中添加元素
语法:SADD key member
2》SMEMBERS:返回指定集合中的元素
SMEMBERS web
3》SISMEMBER:检测value是否时集合中的成员
语法:SISMEMBER key value
4》SREM:删除集合中的一个或者多个成员
语法:SREM key member
5》SPOP:删除并返回集合中的随机元素
语法:SPOP key
6》SRANDMEMBER:随机返回集合中的元素
SRANDMEMBER key count
注意:
count为正数,而且小于集合中的元素,返回一个包含随机元素的集合数组:
count数大于集合中元素的个数,count为负数,返回一个数组,数组中的成员可能出现重复
数组的长度时count取绝对值
7》SDIFF:返回集合间的差集
语法:SDIFF key key ...
8》SINTER:返回集合间的交集
语法:SINTER key key...
SINTER testSet1 testSet2
9》SUNION:返回集合中并集操作
语法:SUNION key key...
SUNION testSet1 testSet2
10》SCARD:返回集合中元素个数
语法:SCARD key
11》SDIFFSTORE:将差集结果保存到指定集合中
语法SDIFFSTORE destination key key
12》SINTERSTOREL:将交集的结果保存在指定集合中
语法:SINTERSTORE destination key key ..
13》SUNIONSTORE:将并集的结果保存到指定结合中
语法:SUNIONSTORE destination key key...
14》SMOVE :将集合中的元素移动到另外一个集合中
语法:SMOVE source destiantion member
注意:原子性操作
5.Zset有序集合类型
1》ZADD:将元素及其分数添加到集合中,返回新增加成员个数
语法:ZADD key score member
ZADD PHPScore 100 king
2》ZSCORE:获得指定元素的分数
语法:ZSCORE key member
ZSCORE PHPScore maizi
ZADD PHPSocre +inf maxInt -inf minInx
3》ZRANGE:按照元素分数从小到达的顺序返回指定start 到stop之间的所有元素(包含两端)
语法:ZRANGE key start stop[WITHSCORES]
ZRANGE PHPScore 0 -1 (可以添加WITHSCORES)
ZRANGE PHPSCore 0 2000 WITHSCORES
ZADD PHPScore 60 test6 60 test7
ZRANGE PHPScore 0 -1
注意:当两个元素的分数相同的时候,redis在排序的时候按照字典的顺序(0<9<A<Z<a<z)
如果使用的事utf-8的编码方式的中文按照字典顺序排列
4》ZREVRANGE:和ZRANGE相反,按照分数从大到小的顺序
语法:ZREVRANGE key start stop [WITHSCORES]
5》ZRANGEBYSCORE:获得指定分数范围内的元素,也是按照分数从小到大的顺序,返回的是分数在指定的
min到max的元素
语法:ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]
#获得分数80-90之间的所有元素
ZRANGEBYSCORE PHPScore 80 90(在数字前面加(表示不包含起始点)
ZRANGEBYSCORE PHPSocre 90 +inf WITHSCORES
6》ZREVRANGEBYSCORE :获得指定分数范围内的元素,按照元素的分数从大到小的顺序
返回min max之间的元素
语法:ZREVRANGESCORE key min max [WITHSCORES] [LIMIT offset count]
7》ZINCYBY:操作某个元素的分数,返回增加之后的分数
语法:ZINCYBY key increment member
ZINCRBY PHPScore 5 test16
8》ZCARD:获得集合中元素的数量
语法:ZCARD key
9》ZCOUNT:获得指定分数內的元素数量
语法:ZCOUNT key min max
ZCOUNT PHPSCore 80 90
10》ZREM:删除一个或多个元素,返回删除元素的个数
语法:ZREM key member...
ZREM PHPScore test16
11》ZREMRANGEBYRANK:按照排名范围删除元素,按照分数从小到达的顺序删除置顶的范围内的所有元素
ZADD testRem 1 a 2 b 3 c 4 d 5 e 6f
12》ZREMRANGEBYSCORE:按照分数范围删除元素
语法:ZREMRANGEBYSCORE key min max
13》ZRANK:指定指定元素的排名,根据分数从小到大的顺序
语法:ZRANK key member
ZRANK PHPSCore maizu
14》ZREVRANK:获得指定元素的排名,根据分数从大到小的顺序
语法:ZREVRANK key member
15》ZINTERSTORE:计算有序集合的交集,并将结果保存起来
语法:ZINTERSTORE destination numkeys [WEIGHTS weight weight...][AGGREGATE SUM|MIN|MAX]
ZINTERSTORE resTestSorted1 2
16》ZUNIONSTORE :计算有序集合并集,将结果保存起来
ZUNIONSTORE destination numkeys key key ...[WEIGHTS weight weight...][AGGREGATE SUM|MIN|MAX]
6.Key相关的命令
1》KEYS:返回所有符合给定模式的key
*:匹配任意个字符
?:匹配一个任意字符
[]:匹配[]之间的一个字符,[b-e],a[b-e] ab ac ad ae
\x:匹配特殊字符\?\*
MSET one 1 two 2 three 3 four 4 five 5 six 6 seven 7
KEYS *
KEYS *o*
KEYS ?o*
KEYS c[n-z]*
2》EXISTS:检测指定key是否存在
语法:EXISTS key
EXISTS one
3》TYPE:返回key所存储的类型
语法:TYPE key
不存在的key,返回none
string
hash
set
zset
list
TYPE testStr11
TYPE userInfo2
4》EXPIRE:设置key的过期时间
语法:EXPIRE key seconds
SET cache_page 'http://phpfamily.org'
EXPIRE cache_page 100
注意:如果key以及存在过期时间,在通过EXPIRE设置的时候会覆盖之前过期时间
5》EXPIREAT:需要指定在指定时间戳过期
语法:EXPIREAT key timstamp
SET cache_page "http://maiziedu.com"
EXPIREAT cache_page1
6》PEXPIRE:以毫秒的形式指定过期时间
语法:PEXPIRE key milliseconds
SET cache_page2 ""
PEXPIRE cache2_page2 50000
7》PEXPIREAT:指定时间戳,单位为毫秒
语法:PEXPIREAT key timestamp
SET cache_page3 'http://phpfamily.org'
PEXPIREAT cache_page
8》TTL:以秒为单位返回key剩余时间
语法:TTL key
注意:如果key没有设置过期时间,返回-1
如果key不存在返回-2
SET cache_page4 "http://www.baidu.com"
TTL cache_page5
EXPIRE cache_page5
9》PTTL:以毫秒为单位返回key的剩余时间
语法:PTTL key
10》PERSIST:将一个带有过期时间的key转变成永久的key
语法:PERSIST key
SET cache 'testCache'
EXPIRE cache 100
TTL cache
PERSIST cache
11》DEL:删除指定的KEY
语法:DEL key ...
12》RANDOMKEY:随机的从当前数据库中返回一个key
13》RENAME:重命名一个键
语法:RENAME key newkey
SET testRename1 'rename1'
RENAME testRename1 testRename2
RENAME testRename2 testRename2
注意:如果名称没有发生改变会报错
14》RENAMENX:如果这个新名称不存在才会生效
语法:RENAMENX key newkey
15》DUMP:序列化给定的key,返回序列化之后的值
语法:DUMP key
SET testDump 'this is a test'
DUMP testDump
16》RESTORE:反序列化
语法:RESTORE key tt1 value
17》MOVE:将当前数据库中的key移动到另外的数据库中
语法:MOVE key bdId
SELECT 0
SET testMove ‘aaa’
MOVE testMove 1
注意:当移动一个key到另外一个数据库中已经存在的key,则不会移动
当移动一个不存在的key会失败
当目录数据库中存在同名key的时候移动失败
OBJECT 、MIGRATE、SCAN,SORT
- Redis学习笔记-Redis安装
- 【Redis学习笔记】Redis初识
- 【Redis学习笔记】Redis特性
- [Redis学习笔记]-Redis配置
- [Redis学习笔记]-Redis数据类型
- [Redis学习笔记]-Redis命令
- [Redis学习笔记]-Redis 事务
- redis学习笔记
- Redis学习笔记一
- Redis基础学习笔记
- redis学习笔记
- Redis学习笔记
- Redis数据库学习笔记
- redis 学习笔记
- redis学习笔记
- redis 学习笔记
- redis学习笔记
- redis学习笔记(一)
- 实现DQN算法玩CartPole
- Struts2拦截器的使用 (详解)
- 极大似然估计法推出朴素贝叶斯法中的先验概率估计公式
- Qt for IOS的坑总结与解决方案
- “Or" Game CodeForces
- redis学习笔记
- c# swagger 笔记一
- Android Studio NDK CMake 指定so输出路径以及生成多个so的案例与总结
- POJ1511 Invitation Cards
- 通过字节码扒一扒java编译器瞒着我们做了什么(3)
- scala 元组tuple的几个知识点
- Mysql触发器
- Apache 服务器无法正常工作问题
- 【Away3D代码解读】(三):渲染核心流程(渲染)