redis数据类型
- String(字符串)
String是redis最基本的类型,你可以理解成和Memcached一模一样的类型,一个key对应一个value,
String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片或者序列化的对象
String类型是redis最基本的数据类型,一个redis中字符串value最多可以是512M - Hash 哈希(类似java中的 Map)
redis hash 是一个键值对集合。
redis hash 是一个string类型的key和value的映射表,hash特别适用于存储对象
类似java里边的Map<String,Object> - .List(列表)
redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边) 或者尾部(右边),它的底层实际是个链表 - Set(集合)
redis的set是string类型的无序集合,它是通过HashTable实现的 - Zset(sorted set:有序集合)
redis zset 和 set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数
redis正是通过这个分数来为集合中的成员进行从小到大排序,zset的成员是唯一的,但分数(score)却可以重复。
redis 键(key)常用命令:
keys* //查看所有的key
exists key的名字 //判断这个key是否存在
move key db //在当前库移除这个key
expire key 秒钟 //为指定的key设置过期时间
ttl key //查看还有多少秒过期,-1表示永不过期,-2标识已过期
type key //查看你的key是什么类型
redis各种类型的常用命令介绍:
Redis字符串(Stirng)(单值单value):
- get,set,append,strlen
获取某个key的值,设置某个key的值,向某个key后边添加元素,key的长度 - incr key 将key加一(一定要是数字才能进行加减)
![incr结果](https://img-blog.csdnimg.cn/20191223142322333.png)
- decr key 将key减一
![decr结果](https://img-blog.csdnimg.cn/20191223142418146.png)
- incrby key increment 将key加increment
![incr increment结果](https://img-blog.csdnimg.cn/2019122314262623.png)
- decrby key increment 将key减increment
![decr increment结果](https://img-blog.csdnimg.cn/20191223142714607.png)
- getrange/setrange(范围内取值/范围内设置值 (左闭右闭))
![getrange结果](https://img-blog.csdnimg.cn/20191223142825438.png)
![setrange结果](https://img-blog.csdnimg.cn/20191223142907976.png)
- setex(set with expire)设置带过期时间的key
setnx(set is not exist)如果这个key不存在的话就设置
![setex结果](https://img-blog.csdnimg.cn/20191223143045667.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- mset/mget/msetnx
![mset结果](https://img-blog.csdnimg.cn/20191223143315681.png)
- getset(先get在set)
![getset结果](https://img-blog.csdnimg.cn/20191223143357538.png)
Redis列表(List)(单值多value):
- lpush/rpush/lrange
![lpush结果](https://img-blog.csdnimg.cn/20191223143600995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- lpop/rpop(头/尾 弹出元素)
![lpop/rpop结果](https://img-blog.csdnimg.cn/20191223143945995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- lindex,按照索引下标获得元素(从上到下)
![lindex结果](https://img-blog.csdnimg.cn/20191223144033782.png)
- llen(长度)
![llen结果](https://img-blog.csdnimg.cn/20191223144114556.png)
- lrem key count value(批量删除key中的count个value)
![lrem结果](https://img-blog.csdnimg.cn/20191223144208779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- ltrim key start stop(截取key 从start到stop 左闭右闭 并重新赋值给key)
![ltrim结果](https://img-blog.csdnimg.cn/20191223144440675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- rpoplpush source destination(从源元素底部弹出一个元素放到目标元素头部上)
![rpoplpush结果](https://img-blog.csdnimg.cn/20191223144611530.png)
- lset key index value(将索引上的值改成value)
![lset结果](https://img-blog.csdnimg.cn/2019122314481920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- linsert key BEFORE|AFTER pivot value(在指定值的前或后添加value)
![linsert结果](https://img-blog.csdnimg.cn/2019122314494997.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
性能总结 - 他是一个字符串链表,left right都可以插入添加
- 如果键不存在,创建新的链表
- 如果键存在,添加新的内容
- 如果值全移除,对应的键也就消失了
- 链表的操作无论头或尾部效率都极高,加入对中间元素进行操作,效率就惨淡了。
Redis集合(Set 单值多value)
- sadd/smembers/sismember
![sadd结果](https://img-blog.csdnimg.cn/20191223145654787.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- scard key (获取集合里面的元素个数)
![scard结果](https://img-blog.csdnimg.cn/20191223145728448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- srem key value (删除集合中的指定value)
![srem结果](https://img-blog.csdnimg.cn/20191223145806249.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- srandmember count(随机取出count个值)
![srandmember结果](https://img-blog.csdnimg.cn/20191223150000511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- spop key (随机出栈一个元素)
![spop结果](https://img-blog.csdnimg.cn/20191223150038352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- smove key1 key2 value(将key1里面的value移到keys中)
![smove结果](https://img-blog.csdnimg.cn/20191223150301429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
Redis哈希(Hash)(kv模式不变,但v是一个键值对)
- hset/hget/hmset/hmget/hgetall/hdel
![hset结果](https://img-blog.csdnimg.cn/20191223150745403.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- hlen key(这个key中有多少个键值对)
![hlen结果](https://img-blog.csdnimg.cn/20191223151225803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- hexists key field(判断key中有没有指定的field)
![hexists结果](https://img-blog.csdnimg.cn/20191223151353282.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- hkeys key/kvals key(获取指定key里面的key/获取指定key里面的value)
![hkeys结果](https://img-blog.csdnimg.cn/20191223151516663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- hincrby/hincybyfloat
![hincryby结果](https://img-blog.csdnimg.cn/20191223151749767.png)
- hsetnx key filed value(如果key中的filed不存在就设置进去)
![hsetnx结果](https://img-blog.csdnimg.cn/20191223151909351.png)
Redis有序集合Zset(sorted set)
- zadd:时间复杂度O(Mlog(N)),M为添加的member数量,N为Sorted Set中的member数量
- zrange
![zadd/zrange结果](https://img-blog.csdnimg.cn/20191223152144366.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- zrangebyscore key min max (按照排序的号来筛选)
![zrangebyscore结果](https://img-blog.csdnimg.cn/20191223152336471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- zrangebyscore key min max limit 开始下标 多少步
![zrangebyscore+limie结果](https://img-blog.csdnimg.cn/20191223152436271.png)
- zrem key value 删除某个value
![zrem结果](https://img-blog.csdnimg.cn/20191223152517966.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)
- zcard 获取个数
![zcard结果](https://img-blog.csdnimg.cn/20191223152648858.png)
- zcount key min max (获取一个区间的分数的数量)
![zcount结果](https://img-blog.csdnimg.cn/20191223152731737.png)
- zscore key value(拿到指定key中的value的分数)
![zscore结果](https://img-blog.csdnimg.cn/2019122315281553.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzdHkxODE4MTg=,size_16,color_FFFFFF,t_70)