Redis是开源的,c编写的,基于内存(快)且支持持久化(数据备份保存到硬盘),高性能的key-value的NoSQL数据库

 

目录

1、字符串String

 2、列表List(有索引)

3、散列 Hash (实际上是map)

4、集合 Set(去重,无序)

5、有序集合 sortedSet (去重,有序)


Linux连接Redis 

cd /usr/local/soft/redis/bin        (必须在该目录下启动)
1、启动前需杀死服务(redis server)
# ps -aux|grep redis
# kill -9 端口号

2、启动服务
方式一:另打开一个窗口
[root@master bin]# redis-server
方式二:后台启动(生成一个日志文件nohup.out)
[root@master bin]# nohup redis-server redis.conf&

3、启动完,连接redis
# redis-cli

Redis数据模型

存入redis 实现去重 redis如何去重_服务器

键key

 任何二进制序列都可作为k值(如空字符串,JPEG文件)

k取值原则(1.不需要太长,消耗内存 2.不宜过短,可读性差)

存取单个

set k v

get k

存取多个(原子性:要插入都插入,要失败都失败)

mset k1 v1 k2 v2

mget k1 k2

生存时间TTL(针对redis中的k,不可对散列中的字段k操作)

k曾经存在,但已消亡        -2

k存在,但在生存期内        返回剩余秒/毫秒

k存在,但未设置TTL        -1

设置TTL

创建时:

set k v EX 5         (EX:设置过期时间5秒,PX:设置过期时间毫秒)

创建后:

expire k 5        (k5秒过期)

pexpire k 5        (k5毫秒过期)

expireat k 时间戳

pexpireat k 时间戳

persist k        (删除过期)

针对建的操作

keys *        (查找所有键)

keys ?        (查找一个字母的键)

keys ??        (查找两个字母的键)

type k        (键类型)

del k        (删除键,del *删不掉,*会识别成二进制序列的k)

1、字符串String

set str  123456789abc

strlen str        (获取长度)

append str def        (字符串后追加def)

append s 123        (s不存在,等同于set s 123)

getrange str   0      2              "123"  (获取子字符串)

                     -3      -1             "def"

                    开始  结束

存入redis 实现去重 redis如何去重_服务器_02

                   原123456789abc

setrange str 5 1234        (覆盖子字符串)

                    现123451234abc

步长

set k 10        (v是int类型)

步长1的增减

incr k        11

decr k        10

步长增减

incrby k 20        30

incrby k -20        10

位图bitmap

String默认隐藏一个位图,位图不是正真的数据类型,位图就是由很多个bit位连续组成的一个列表或一个集合,无论有无数据,位置都在那,默认位置全部为0,且redis认为0不是数据 

set k a

getbit k 0

getbit k 1

...

getbit k 7

0 1 1 0  0 0 0 1 —— a

0 1 1 0  0 0 1 0 —— b

setbit k 6 1        (把6的位置改为1)

setbit k 7 0        (把7的位置改为0)

get k        “b”

返回0或1 在指定区间上第一次出现的位置

bitpos k 0    0      7            0

                  开始  结束

bitpos k 1    0       7            1

位操作

0 1 1 0  0 0 0 1 —— a

0 1 1 0  0 0 1 0 —— b

bitop  and  aandb   a  b

               结果保存到

and并(都为1才为1)

0 1 1 0  0 0 0 0 —— aandb


bitop or aorb a b

or或(有1则1)

0 1 1 0  0 0 1 1 —— aorb


bitop xor axorb a b

xor异或(相同为0,不同为1)

0 0 0 0  0 0 1 1 —— axorb


bitop not nota a

not非

1 0 0 1  1 1 1 0 —— nota

统计指定位区间上值1的个数

bitcount key [start] [end]        (没指定区间,则查找所有)

(不是按元素的索引,而是按8个bit形成的一块区域当作一个区间)

set k aaaa

存入redis 实现去重 redis如何去重_运维_03

bitcount k 0 3        12

bitcount k 0 1        6

 2、列表List(有索引)

左(上)右(下)压入元素

lpush l java

rpush l python

左右弹出元素(弹出后,原数据中就没有了)

lpop l        "java"

返回列表指定范围元素

lrange l     0     1

              开始  结束

lrange l     0     -1        (表示返回列表所有元素)

获取指定位置元素

llindex l 0

设置指定位置元素的值

lset l 2 python

获取列表长度

llen l

从列表头部开始删除值为value的元素count次

lrem l count value        (count>0,从上往下删;count<0,从下往上删)

去除指定范围外的元素

ltrim l    1      2

           开始  结束

阻塞(弹值用)

blpop ll 10        (阻塞10秒)

blpop ll 0        (给0表示永久阻塞,直到有值弹出)        lpush ll java

3、散列 Hash (实际上是map)

redis本质上是k:v,现在v变成map,k:[k:v]

设置字段(单个/多个)

hset stu id 1001

hset stu name zs

hmset stu id 1001 name zs

存入redis 实现去重 redis如何去重_服务器_04

hget stu id        "1001"

hmget stu id name        "1001" "zs"

返回字段个数

hlen stu

判断字段是否存在

hexists stu id        (存在返回1)

hexists stu clazz        (不存在返回0)

存储易混淆字段


返回所有键值对

hgetall stu

返回所有字段名

hkeys stu

返回所有值

hvals stu

删除指定字段

hdel stu id 

hash用途

节约内存空间,对于存储多个字段的信息选择hash

4、集合 Set(去重,无序)

增加一个或多个元素(自动去重)

sadd s java hadoop python

移除一个或多个元素(元素不存在则自动忽略)

srem s java pyhthon

返回集合包含的所有元素

smembers s

检查给定元素是否存在于集合中

sismember s java        (有返回1,没有返回0)

随机返回集合中指定个数的元素

srandmember s count        (count为正数,返回元素各不相同;

                                              count为负数,返回元素可能出现重复)

返回集合中元素个数

scard s

随机移除集合中某个元素,并显示

spop s

对集合的操作

sadd s1 1 2 3 4 5 6

sadd s2 4 5 6 7 8 9 

差集

sdiffstore s3 s1 s2

smembers s3        123

交集

sinterstore s4 s1 s2

smembers s4        456

并集

sunionstore s5 s1 s2

smembers s5        1234567899

5、有序集合 sortedSet (去重,有序)

应用场景:音乐打榜

每个元素都关联一个浮点数分值(sore),按分值从小到大排列,分值可相同

添加元素(一个或多个)

zadd z 1.0 a 2.0 b 3.0 c        (若元素已存在,则使用新的分值。

                                           分值相同,转化为二进制排序;分值不能精确表达,只能近似)

移除元素(一个或多个)

zrem z a c

加减分值

zincrby z 5 a        (a的分值加5)

zincrby z -5 a        (a的分值减5)

返回元素排名(索引)

zrank z a        (返回元素a的排名)

返回指定索引区间元素

zrange z 0 1

返回指定分值区间元素

zrangebyscore  z 1 5

移除指定排名范围的元素

zremrangebyrank z 0 1

返回集合中元素个数

zcard z

对集合的操作

zadd za 10 a 20 b

zadd zb 12 a 20 c

aggregate:指定并集结果的聚合方式 

并集

存入redis 实现去重 redis如何去重_redis_05

    

存入redis 实现去重 redis如何去重_服务器_06

分值默认相加

存入redis 实现去重 redis如何去重_存入redis 实现去重_07

  

存入redis 实现去重 redis如何去重_java_08

 其他操作

库与库之间的切换

select 1

select 2

清空

flushdb        (清空当前库)

flushall        (清空所有库中数据)