Redis知识点总结
01.Redis知识点一:redis特点以及安装使用
Redis特点介绍
REmote DIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统。Redis提供一些丰富的数据结构,包括lists,sets,ordered sets以及hashes,还有和Memcached一样的strings结构。Redis当然还包括了对这些数据结构的丰富操作。
1:数据结构丰富
2:持久化
3:支持简单事务
4:主从配置方便。
Redis可以用来做存储(storge)而menccathed是用来做缓存(cache)这个特点主要是因为其有持久化的功能。存储的数据有结构对于memcached来说,存储的数据,只有一种类型--字符串,而redis则可以存储字符串,链表,哈希结构,集合,有序集合。
Redis的下载安装
1.官方站点:redis.io 下载最新版或者最新stable版。
2.解压源码并进入目录
3.不用configure(redis本身自带coonfigure)
4.直接make(make是检查一下你缺少什么库,如果是32为机器 make为32bit)
注意碰到的问题:时间错误。.




















02.Redis知识点二:redis通用key操作命令
通用键值操作
Redis对于key的操作命令:
01.keys pattern:查询想要的key
在redis里,允许模糊查询key
:通配任意给字符,* *这里的代表0或者多个
?:通配单个字符
redis 127.0.0.1:6379> key * 1)"age" 2)"site" redis 127.0.0.1:6379>keys site 1)"site" redis 127.0.0.1:6379>keys s* 1)"site" redis 127.0.0.1:6379>keys site* 1)"site"
讯享网
02.del key1 key2.....keyn 作用:删除1个或多个键:返回值:不存在的key忽略掉,返回真正删除的key的数量
讯享网redis 127.0.0.1:6379>
03.randomkey:随机选则key
redis 127.0.0.1:6379> randomkey "age" redis 127.0.0.1:6379>randomkey "site"
04.type key:返回key存储的值的类型,有string,link,set,order set,hash
讯享网redis 127.0.0.1:6379> type age string redis 127.0.0.1:6379>type site string
05.exists key:判断key是否存在。返回1/0
redis 127.0.0.1:6379> exists age (integer)1 redis 127.0.0.1:6379> exists site (integer)1
06.del key1 key2....keyn 作用:删除1个或多个键 返回值:不存在的key 忽略掉,返回真正删除的key的数量。
讯享网redis 127.0.0.1:6379> del age (integer)1 redis 127.0.0.1:6379> keys * 1)"site" redis 127.0.0.1:6379>exists age (integer)0
07.rename key newkey 作用:给key赋一个新的key名 注:如果newkey已存在,则newkey的原值被覆盖 如果新key不存在,这里就做改名的动作。如果已经存在就不改了,不然就和别的key发生冲突了。
redis 127.0.0.1:6379>rename site wangzhi ok redis 127.0.0.1:6379>exists site (integer)0 redis 127.0.0.1:6379>keys * 1)"wangzhi" redis 127.0.0.1:6379>get wangzhi "www.zixue.it"
08.renamenx key newkey:作用:把key改名为newkey 返回:发生修改返回1 未发生修改返回0
如果search不存在,你则改成功。如果存在你就不改
讯享网redis 127.0.0.1:6379> set site www.zixue.it OK redis 127.0.0.1:6379> set search ww.so.com OK redis 127.0.0.1:6379> rename site sea 这里site改为了search,原本的search如何了?改了之后和原来的重名,原来的search就覆盖了 (integer)1 redis 127.0.0.1:6379> get sea "www.zixue.it" redis 127.0.0.1:6379> renamenx sea search (integer)0 redis 127.0.0.1:6379> get search "www.zixue.it" redis 127.0.0.1:6379> keys * 1)"search" 2)"sea"
09.move key db:移动一个key redis是用来存储用的,它不仅仅是用来缓存用的。给我们设定了多个服务器。默认给我们开启了databases:16个数据库分别是从0到15,默认是从0号数据库中开始操作数据的。
root@localhost redis># vim redis.conf redis 127.0.0.1:6379> keys * 1)"search" 2)"sea" redis 127.0.0.1:6379> select 1 OK redis 127.0.0.1:6379[1]> keys * (empty list or set):没有一个key? 为什么?之前还有两个key,因为这里是来得了1号服务器。默认状态是走到0号服务器。 redis 127.0.0.1:6379[1]> select 0 OK redis 127.0.0.1:6379> keys * 1)"search" 2)"sea"
将0号数据库的key移动到1号数据库里面
讯享网redis 127.0.0.1:6379>move sea 1 (integer)1 redis 127.0.0.1:6379>keys * 1)"search" redis 127.0.0.1:6379>select 1 OK redis 127.0.0.1:6379[1]>keys * 1)"sea" redis 127.0.0.1:6379[1]>
在redis里面,默认是没有有效期的。为什么没有有效期?因为redis它需要做的是存储,而非缓存。但是如果就要当作缓存来用该如何?就要设一个有效期该如何
10.expire key 整型值 作用:设置key的声明周期一秒为单位
redis 127.0.0.1:6379[1]> select 0 OK redis 127.0.0.1:6379>keys * 1)"search" 查看它还能活多久 redis 127.0.0.1:6379> ttl search (interger) -1(-1代表永久有效,它不自动生效) redis 127.0.0.1:6379>
11.ttl key:查询有效期 作用:查询key的生命周期 返回:秒数(以秒数为单位的生命) 注意:对于不存在的key或已过期的key。都返回-1 在Redis 2.8中,对于不存在的key返回-2
讯享网redis 127.0.0.1:6379> ttl search (integer)-1 redis 127.0.0.1:6379> expire search 10 (integer)1 redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search "www.so.com" redis 127.0.0.1:6379> get search (nil) 这里已经给它设置10秒了,它已经不存在了。 redis 127.0.0.1:6379> expire search 10 (integer)1 redis 127.0.0.1:6379> ttl search (integer)7 redis 127.0.0.1:6379> ttl search (integer)6 redis 127.0.0.1:6379> ttl search (integer)5 redis 127.0.0.1:6379> ttl search (integer)4 redis 127.0.0.1:6379> ttl search (integer)3 redis 127.0.0.1:6379> ttl search (integer)2 redis 127.0.0.1:6379> ttl search (integer)1 redis 127.0.0.1:6379> ttl search (integer)0 redis 127.0.0.1:6379> ttl search (integer)-1 redis 127.0.0.1:6379> ttl search (integer)-1
pexpire key 毫秒数,设置生命周期数 pttl key,以毫秒返回生命周期
redis 127.0.0.1:6379>set search www.zixue.it OK redis 127.0.0.1:6379>pexpire search 9000 (integer)1 redis 127.0.0.1:6379>pttl search (integer)5207 redis 127.0.0.1:6379>pttl search (integer)3343 redis 127.0.0.1:6379>pttl search (integer)1853 redis 127.0.0.1:6379>pttl search (integer)837 redis 127.0.0.1:6379>pttl search (integer)-1 redis 127.0.0.1:6379>
把这个key设置为永久有效
讯享网redis 127.0.0.1:6379> set site www.zixue.it OK redis 127.0.0.1:6379> expire site 10 将它的生命周期设置为10秒 (integer)1 redis 127.0.0.1:6379> ttl site (integer)7 redis 127.0.0.1:6379> ttl site (integer)6 redis 127.0.0.1:6379> persist site //把这个key设置为永久有效 (integer)1 redis 127.0.0.1:6379> ttl site (integer)-1 redis 127.0.0.1:6379> get site "www.zixue.it" //这里就的set还存在 redis 127.0.0.1:6379>
03.Redis知识点三:string结构及命令详解
Redis字符串类型的操作
01.set key value[ex 生命周期 秒数]/[px 毫秒数][nx]/[xx] ex:可以让生命周期在设置之初就有一个生命周期
redis 127.0.0.1.6379> flushdb 窜穿一下db OK redis 127.0.0.1.6379> keys * (empty list or set) redis 127.0.0.1.6379>set site www.zixue.it OK redis 127.0.0.1.6379> ttl search (integer) -1 redis 127.0.0.1.6379> ttl search (integer) -1 redis 127.0.0.1.6379>get search (nil) redis 127.0.0.1.6379> set search www.baidu.com ex 10px 1567 ok redis 127.0.0.1.6379> get search (nil) redis 127.0.0.1.6379> set search www.baidu.com ex 10 px 6567 OK redis 127.0.0.1.6379> get search "www.baidu.com" redis 127.0.0.1.6379> ttl search (integer)1 redis 127.0.0.1.6379> set search www.baidu.com ex 10 px 6567 OK redis 127.0.0.1.6379> pttl search (integer)2528 redis 127.0.0.1.6379> flushdb OK redis 127.0.0.1.6379> set site www.so.com OK redis 127.0.0.1.6379>set site www.baidu.com nx //这里如果不加则直接改成什么数加nx 的意思是site不存在的时候再做子操作,要是存在就不能发挥作用 (nil) redis 127.0.0.1.6379> get site "www.so.com" redis 127.0.0.1.6379> set site www.google.com xx OK redis 127.0.0.1.6379> get site "www.goole.com" redis 127.0.0.1.6379> set abc www.google.com.xx (nil)
02.mset multil set,一次性设置多个键值
讯享网mset multil set,一次性设置多个键值 例:mset key v1 key2 v2.... redis 127.0.0.1.6379>mset a aman bbold c comtroller d diamond OK redis 127.0.0.1.6379>keys * 1)"a" 2)"d" 3)"b" 4)"c" 5)"site" redis 127.0.0.1.6379> get a "aman" redis 127.0.0.1.6379> get b "bold" 一次get多个键值 redis 127.0.0.1.6379> mget a b c 1) "aman" 2) "bold" 3) "comtroller" redis 127.0.0.1.6379>
03.get key 作用 获取key的值
04.mget key1 key2 ...keyn 作用获取多个key的值
05.setrange key offset value 作用把字符串的offset偏移字节改成value 注意:如果偏移量> 字符长度,该字符自动补0x00
讯享网redis 127.0.0.1:6379> flushdb //先清一下 OK redis 127.0.0.1:6379>set word helllo OK redis 127.0.0.1:6379>get word "hello" redis 127.0.0.1:6379>setrange word 2 ?? //设置范围,从那里开始偏移 (integer)5 redis 127.0.0.1:6379>get word "he??o" redis 127.0.0.1:6379>set word hell OK redis 127.0.0.1:6379>setrange word 6 ! (integer)7 redis 127.0.0.1:6379>get word "hello\x00!"
06.append key value 往字符串的尾巴处追加 作用:把value追加到key的原值上
redis 127.0.0.1:6379>append word @@ (integer)9 redis 127.0.0.1:6379>get word "hello \x00!@@"
07.getrange key start stop: 获取他的一小部分的 作用:是获取字符串中[start,stop]范围的值 注意:对于字符串的下标,左数从0开始,右数从-1开始
注意:
1:start>=length,则返回空字符串
2:stop>=length,则截取至字符结尾
3:如果start 所处位置在stop右边,返回空字符串
讯享网redis 127.0.0.1:6379>set area chinese OK redis 127.0.0.1:6379>getrange area 1 4 "hine" redis 127.0.0.1:6379>set statis working OK redis 127.0.0.1:6379>getrange status 0 -3 "worki" redis 127.0.0.1:6379>getrange status 0 -4 "work" redis 127.0.0.1:6379>getrange status 6 3 "" redis 127.0.0.1:6379>set status sleep OK redis 127.0.0.1:6379>getset status wakeup "sleep" redis 127.0.0.1:6379>get status "wakeup" redis 127.0.0.1:6379>getset status working "wakeup" redis 127.0.0.1:6379>set age 29 OK redis 127.0.0.1:6379>get age "29" redis 127.0.0.1:6379>incr age (integer)30 redis 127.0.0.1:6379>decr age (integer)29 redis 127.0.0.1:6379>set num OK redis 127.0.0.1:6379>decr num (integer) 99999 redis 127.0.0.1:6379>incrby age 5 (integer)34 redis 127.0.0.1:6379>incrby age 5 (integer)39 redis 127.0.0.1:6379>decrby age 10 (integer)29
08.incrby key number :
redis 127.0.0.1:6379>incrby age 90 (integer)92
把它当成一个浮点数来增加
09.incrbyfloat key floatnumber:
讯享网redis 127.0.0.1:6379>incrbyfloat age 3.5 "95.5" redis 127.0.0.1:6379>incrbyfloat age 0.5 29.5 redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> decr key redis 127.0.0.1:6379>set age 20 decrby key number getbit key offset
10.setbit key offset value
设置offset对应二进值位上的值
返回:该位上的旧值
注意:
1:如果offset过大,则会在中间填充0.
2:offset最大大到多少,这里关联到value最多能有多长
在位上做操作
给定字母,可能是A-Z,但具体是谁,不知道,如何把他们变成小写
redis 127.0.0.1:6379>setbit char 2 1 (integer)0 redis 127.0.0.1:6379>get char "a" redis 127.0.0.1:6379>set char B OK redis 127.0.0.1:6379>setbit char 2 1 (integer)0 redis 127.0.0.1:6379>get char "b" 小写变成大写,这里是从位的角度来做操作 redis 127.0.0.1:6379> setbit char 2 0 (integer)1 redis 127.0.0.1:6379>get char "B" 这里最大能搞多少呢?调max offset N(N+1)/8个字节,最大的字符的值是多大? redis 127.0.0.1:6379>setbit char 1 (error)ERR bit offset is not an integer or out of range redis 127.0.0.1:6379>setbit char 1 最大值是2的32次方个字节减1除以8剩下2的29次方可以推算出最大的key值是512M (integer)0 (1.72s)
11.bitop operation destkey key1[key2...]:让两个key来做相应的位上的AND操作 对于key1,key2,keyN作operation并将结果保存到destkey上. operation可以是AND|OR NOT XOR
讯享网redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>setbit upper 2 1 (integer)0 redis 127.0.0.1:6379>get upper " " redis 127.0.0.1:6379>setbit lower 2 1 谁和它或谁变成小写 (integer)0 redis 127.0.0.1:6379>set char Q OK redis 127.0.0.1:6379> bitop or char char lower 让他们两者做位上的操作 (integer)1 redis 127.0.0.1:6379> get char "q"
04.Redis知识点四:list结构及命令详解
link链表结构:若干元素各自是各自的独立成体系,这里有一个指针指向下一个元素的
01.Ipush key value:作用把值插入到链表头部
redis 127.0.0.1:6379>flushdb 清一下所有的数据 OK redis 127.0.0.1:6379>keys * (empty list or set) //没有数据 redis 127.0.0.1:6379>lpush character a (integer)1 redis 127.0.0.1:6379>lpush character b (integer)2 redis 127.0.0.1:6379>lpush character c (integer)3 redis 127.0.0.1:6379>lrange character 1 2 1)"a" 2)"b" redis 127.0.0.1:6379>lrange character 1 3 1)"a" 2)"b" 3)"c" redis 127.0.0.1:6379>lrange character 0 3 1)"0" 2)"a" 3)"b" 4)"c" 不管这个链表有多少元素,则立即可以看到它所有元素 redis 127.0.0.1:6379>lrange character 0 -1 1)"0" 2)"a" 3)"b" 4)"c"
02.rpop key:作用:返回并删除链表尾元素
03.rpush lpop:
讯享网redis 127.0.0.1:6379>rpop character "c" redis 127.0.0.1:6379>lrange character 0 -1 1)a" 2)"b" redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>lpush answer a b c a b d a (integer)7 redis 127.0.0.1:6379>lrange character 0 -1 1)"a" 2)"b" 3)"d" 4)"a" 5)"c" 6)"b" 7)"a" 在这里先删一个b,给的是整数就从头部往尾部删 redis 127.0.0.1:6379>lrem answer 1 b (integer) 1 redis 127.0.0.1:6379>lrange anser 0 -1 再次查看所有内容 1)"a" 2)"d" 3)"a" 4)"c" 5)"b" 6)"a" 从尾部开始删2个a redis 127.0.0.1:6379>lrem answer -2 a (integer) 2 redis 127.0.0.1:6379> lrange answer 0 -1 1)"a" 2)"d" 3)"c" 4)"b" redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>rpush a b c d e f (integer) 5 redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>rpush character a b c d e f (integer)6 redis 127.0.0.1:6379>lrange character 0 -1 1)"a" 2)"b" 3)"c" 4)"d" 5)"e" 6)"f" redis 127.0.0.1:6379>ltrim character 2 5 OK redis 127.0.0.1:6379>lrange character 0 -1 1)"c" 2)"d" 3)"e" 4)"f" redis 127.0.0.1:6379>ltrim character 1 -2 OK redis 127.0.0.1:6379>lrange character 0 -1 1)"d" 2)"e" redis 127.0.0.1:6379>lindex character 0 "d" redis 127.0.0.1:6379>lindex character 1 "e" redis 127.0.0.1:6379>lindex character 2 (nil) redis 127.0.0.1:6379>llen character (integer)2 redis 127.0.0.1:6379> rpush b c d (integer)2 redis 127.0.0.1:6379>llen character (integer)2 redis 127.0.0.1:6379>rpush character b c d (integer)5 redis 127.0.0.1:6379>llen character (integer)5 redis 127.0.0.1:6379> rpush num 1 3 6 8 9 (integer)5 redis 127.0.0.1:6379>linsert num before 3 2 (integer)6 redis 127.0.0.1:6379>lrange num 0 -1 1)"1" 2)"2" 3)"3" 4)"6" 5)"8" 6)"9" redis 127.0.0.1:6379>
04.lrange key start stop:作用:返回链表中[start,stop]中的元素
规律:左数从0开始,右数从-1开始
lrem key count value
作用:从key链表中删除value值
注: 删除count的绝对值个value后介绍、Count>0 从表头删除 Count<0 从表尾删除
Itrim key start stop:作用:剪切key对应的链接,切[start,stop]一段,并把该段重新赋值给key
lindex key index 作用:返回index索引上的值。
(nil)
05.ream key count value 作用:从key链表中删除value值 注:删除count的绝对值个vaue后介绍Count>0 从表头删除 Count<0从表尾删除
讯享网
06.ltrim key start stop :作用:剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key
07.lindex key index 作用:返回lindex key 2
讯享网
08.llen key 作用:计算链接表的元素个数
redis 127.0.0.1:6379>llen task (integer)3 redis 127.0.0.1:6379>
09.linsert key after|before search value 作用:在链表中寻找‘search’,并在search值之前之后,插入value 注:一旦找到一个search 后,命令就结束了,因此不会插入多个value
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
10.rpoplpush source dest : 作用 :把sourse 的尾部拿出,放在dest的头部,并返回 该单元值
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
11.brpop ,blpop key timeout 作用:等待弹出key的尾/头元素,Timeout为等待超时时间 如果timeout为0,则一直等待
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
12.
redis 127.0.0.1:6379>flushdb 清一下所有的数据 OK redis 127.0.0.1:6379>keys * (empty list or set) //没有数据 redis 127.0.0.1:6379>lpush character a (integer)1 redis 127.0.0.1:6379>lpush character b (integer)2 redis 127.0.0.1:6379>lpush character c (integer)3 redis 127.0.0.1:6379>lrange character 1 2 1)"a" 2)"b" redis 127.0.0.1:6379>lrange character 1 3 1)"a" 2)"b" 3)"c" redis 127.0.0.1:6379>lrange character 0 3 1)"0" 2)"a" 3)"b" 4)"c" 不管这个链表有多少元素,则立即可以看到它所有元素 redis 127.0.0.1:6379>lrange character 0 -1 1)"0" 2)"a" 3)"b" 4)"c"
13.rpop key:作用:返回并删除链表尾元素
讯享网rpush lpop: redis 127.0.0.1:6379>rpop character "c" redis 127.0.0.1:6379>lrange character 0 -1 1)a" 2)"b" redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>lpush answer a b c a b d a (integer)7 redis 127.0.0.1:6379>lrange character 0 -1 1)"a" 2)"b" 3)"d" 4)"a" 5)"c" 6)"b" 7)"a" 在这里先删一个b,给的是整数就从头部往尾部删 redis 127.0.0.1:6379>lrem answer 1 b (integer) 1 redis 127.0.0.1:6379>lrange anser 0 -1 再次查看所有内容 1)"a" 2)"d" 3)"a" 4)"c" 5)"b" 6)"a" 从尾部开始删2个a redis 127.0.0.1:6379>lrem answer -2 a (integer) 2 redis 127.0.0.1:6379> lrange answer 0 -1 1)"a" 2)"d" 3)"c" 4)"b" redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>rpush a b c d e f (integer) 5 redis 127.0.0.1:6379>flushdb OK redis 127.0.0.1:6379>rpush character a b c d e f (integer)6 redis 127.0.0.1:6379>lrange character 0 -1 1)"a" 2)"b" 3)"c" 4)"d" 5)"e" 6)"f" redis 127.0.0.1:6379>ltrim character 2 5 OK redis 127.0.0.1:6379>lrange character 0 -1 1)"c" 2)"d" 3)"e" 4)"f" redis 127.0.0.1:6379>ltrim character 1 -2 OK redis 127.0.0.1:6379>lrange character 0 -1 1)"d" 2)"e" redis 127.0.0.1:6379>lindex character 0 "d" redis 127.0.0.1:6379>lindex character 1 "e" redis 127.0.0.1:6379>lindex character 2 (nil) redis 127.0.0.1:6379>llen character (integer)2 redis 127.0.0.1:6379> rpush b c d (integer)2 redis 127.0.0.1:6379>llen character (integer)2 redis 127.0.0.1:6379>rpush character b c d (integer)5 redis 127.0.0.1:6379>llen character (integer)5 redis 127.0.0.1:6379> rpush num 1 3 6 8 9 (integer)5 redis 127.0.0.1:6379>linsert num before 3 2 (integer)6 redis 127.0.0.1:6379>lrange num 0 -1 1)"1" 2)"2" 3)"3" 4)"6" 5)"8" 6)"9" redis 127.0.0.1:6379> redis 127.0.0.1:6379> (integer) redis 127.0.0.1:6379> (integer) lrange key start stop:作用:返回链表中[start,stop]中的元素 规律:左数从0开始,右数从-1开始
14.lrem key count value
作用:从key链表中删除value值
注: 删除count的绝对值个value后介绍、Count>0 从表头删除 Count<0 从表尾删除
Itrim key start stop:作用:剪切key对应的链接,切[start,stop]一段,并把该段重新赋值给key
lindex key index 作用:返回index索引上的值。
(nil)
05.Redis知识点五:位图法统计活跃用户
1.国外某大型网站有10亿用户,有频繁登录的,也有不经常登录的 2,如何来记录用户的登录信息 3:如何来查询活跃用户,【如1周内 登录3次的。 每周评出:有奖活跃用户:练习7天活动 每月评,
讯享网建一张用户表的登录表,登录时间 uid logtime 上亿用户,每天有1亿用户登录,2天2亿 3天3亿数据依此类推.. 面对这样爆发性数据增长如何处理。 思路:这个人今天登录了没有,要么登录了要么没有登录可以用,因此可以通过信息的角度来看 1/0表示这个人今天是否有登录。 uid 用户有7个 第一位没有连号用户所以设置位0 uid 1 2 3 4 5 6 7 周一: 0 1 0 1 0 0 0 1 周二: 0 1 1 0 0 1 1 1 周三: 0 1 1 0 周四 周五 周六 redis 127.0.0.1.6379>setbit mon 0000 0000 0 (integer)0 redis 127.0.0.1.6379>setbit min 3 1 (integer)0 redis 127.0.0.1.6379>setbit mon 5 1 (integer)0 redis 127.0.0.1.6379>setbit mon 7 1 (integer)0 redis 127.0.0.1.6379>setbit teb 0000 0000 0 (integer)0 redis 127.0.0.1.6379>setbit teb 3 1 (integer)0 redis 127.0.0.1.6379>setbit fed 5 1 (integer)0 redis 127.0.0.1.6379>setbit fed 8 1 (integer)0 redis 127.0.0.1.6379>setbit wen 3 1 (integer)0 redis 127.0.0.1.6379>setbit wen 6 1 (integer)0 redis 127.0.0.1.6379>bitop and resmin feb wen (integer)
位图法统计活跃用户有以下优点: 1节约空间,1亿用户bit约10M的字符就能表示 2计算方便
06.Redis知识点六:set结构及命令详解
集合的性质:唯一性,无序性,确定性
注意:在string和link的命令中,可以通过range来访问string中的某几个字符或某几个元素,但是因为集合的无序性,无法通过下标或范围来访问部分元素,因此想看元素,要么随机选一个,要么全选。
01.sadd key value1 value2 作用:往key中增加元素
redis 127.0.0.1:6379>sadd gender(给集合取一个名称) male female (integer)2//给集合增加元素成功了2个元素 redis 127.0.0.1:6379>sadd gender yao yao (integer)1 //集合具有唯一性 redis 127.0.0.1:6379>sadd gender yao (integer)0 //yao 这个元素已经存在了所以为0 redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
02.srem value value1 value2 作用:删除集合中集为value1 value2的元素 返回值:忽略不存在的元素后,真正删除掉的元素的个数
讯享网redis 127.0.0.1:6379>srem gender yao (integer)1 redis 127.0.0.1:6379>smembers gender 1)"female" 2)"male" redis 127.0.0.1:6379>srem genders x c (integer)0 //没有的值,它删除不了 redis 127.0.0.1:6379>srem gender male x c (integer)1 //没有的值它删除不了,它只能删除有的值
03.spop key 作用:返回并删除集合中key中的1个随机元素 随机体系了无序性
redis 127.0.0.1:6379>sadd gender a b c d e f //添加一些元素 (integer)6 redis 127.0.0.1:6379>smembers gender //查看gender的所有元素 1)"e" 2)"a" 3)"d" 4)"female" 5)"b" 6)"c" 7)"f" redis 127.0.0.1:6379>spop gender "d" redis 127.0.0.1:6379>smembers gender 1)"e" 2)"a" 3)"female" 4)"b" 5)"c" 6)"f" redis 127.0.0.1:6379>spop gender "b" redis 127.0.0.1:6379>spop gender "e" redis 127.0.0.1:6379>spop gender "a" redis 127.0.0.1:6379>spop gender "c" redis 127.0.0.1:6379>spop gender "f"
04. srandmember key 作用:返回集合key中,随机的1个元素。
讯享网//随机抛出,而又不把它删除掉 redis 127.0.0.1:6379> sadd gender a b c d e (integer)5 redis 127.0.0.1:6379>srandmember gender "c" redis 127.0.0.1:6379>srandmember gender "c" redis 127.0.0.1:6379>srandmember gender "f" redis 127.0.0.1:6379>srandmember gender "f" redis 127.0.0.1:6379>srandmember gender "a" redis 127.0.0.1:6379>srandmember gender "e" redis 127.0.0.1:6379>srandmember gender "f" redis 127.0.0.1:6379>srandmember gender "f"
05. sismember key value 作用:判断value是否在key集合中 是返回1,否返回0
//想看看这个集合里面有没有这个元素? redis 127.0.0.1:6379>smembers gender 1)"e" 2)"d" 3)"a" 4)"c" 5)"b" 6)"female" 7)"f" redis 127.0.0.1:6379> sismember gender Q //查看Q是否是gender里面的value (integer)0 //0为不是gender的value redis 127.0.0.1:6379> sismember gender f (integer)1 redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
06.smembers key 作用:返回(查看)集合中所有的元素
讯享网redis 127.0.0.1:6379>smembers gender 1)"female" 2)"yao" 3)"male"//这里没有按照添加的顺序排序下来,可能是随机性的
07. scard key 作用:返回集合中元素的个数
redis 127.0.0.1:6379>scard gender (integer)7
08.smove source dest value(必须针对两个集合来操作) 作用:把source中的value删除,并添加到dest集合中
讯享网s move是移动的意思,给你一个Source的集合,dest目标集合,指定一个value(它将要怎么做),就将source里面种的某个value移动到dest目标集合里面去。 redis 127.0.0.1:6379>sadd upper A B C (integer)3 redis 127.0.0.1:6379>sadd lower a b c (integer)3 redis 127.0.0.1:6379>smove upper lower A //将upper的A移动到lower里面去 (integer)1 redis 127.0.0.1:6379>smembers upper 1)"C" 2)"B" redis 127.0.0.1:6379>smembers lower 1)"c" 2)"b" 3)"a" 4)"A" redis 127.0.0.1:6379>smove lower upper A (integer)1 redis 127.0.0.1:6379>smembers lower 1)"c" 2)"b" 3)"a" redis 127.0.0.1:6379>smembers upper 1)"C" 2)"B" 3)"A"
09.sinter key1 key2 key3 作用:求出key1 key2 key3 三个集合中的交集,并返回
redis 127.0.0.1:6379>sadd s1 0 2 4 6 (integer) 4 redis 127.0.0.1:6379>sadd s2 1 2 3 4 (integer) 4 redis 127.0.0.1:6379>sadd s3 4 8 9 12 (integer) 4 redis 127.0.0.1:6379>sinter s1 s2 s3 1)"4" redis 127.0.0.1:6379>sinter s1 s2 s3 1)"4" redis 127.0.0.1:6379>sadd lisi a b c d (integer) 4 redis 127.0.0.1:6379>sadd wang a c d e f (integer) 5 redis 127.0.0.1:6379>sadd poly a c d g (integer) 4 redis 127.0.0.1:6379>sinter lisi wang poly 1)"d" 2)"c" 3)"a" redis 127.0.0.1:6379>
10.sinterstore dest key1 key2 key3 作用:求出key1 key2 key3 三个集合中的交集,并赋给dest
讯享网//如果需要将这个结果存起来 redis 127.0.0.1:6379>sinter lisi wang poly 1)"d" 2)"c" 3)"a" redis 127.0.0.1:6379>sinterstore result lisi wang poly (integer)3 redis 127.0.0.1:6379>smembers result 1)"d" 2)"c" 3)"a" redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
11.suion key1 key2..Keyn 作用:求出key1 key2 keyn的并集,并返回
redis 127.0.0.1:6379>sadd lisi a b c d (integer) 4 redis 127.0.0.1:6379>sadd wang a c d e f (integer) 5 redis 127.0.0.1:6379>sadd poly a c d g (integer) 4 redis 127.0.0.1:6379>sunion lisi wang poly 1)"e" 2)"d" 3)"a" 4)"g" 5)"c" 6)"b" 7)"f" redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
12.sdiff key1 key2 key3 作用:求出key1与key2 key3的差集 即 key1-key2-key3
讯享网redis 127.0.0.1:6379>sadd lisi a b c d (integer) 4 redis 127.0.0.1:6379>sadd wang a c d e f (integer) 5 redis 127.0.0.1:6379>sadd poly a c d g (integer) 4 redis 127.0.0.1:6379>sdiff lisi wang 1)"b"
07.Redis知识点七:order set结构及命令详解
有序集合 用什么排序呢?需要给它一个排序因子,既然有序每个元素就自身有一个权重或者说因子,为了方便讨论我们称之为score.在声明这个集合的时候,它不仅要声明这个集合的值,还有声明这个元素的score.如果没有score就达不到有序了。
01.zadd key score1 value1 score2 value2... 添加元素
redis 127.0.0.1:6379>zadd stu 18 lily 19 hmm 20 lilei 21 lilei (integer)3 redis 127.0.0.1:6379>zadd class 12 lily 13 lucy 6 lilei 21 poly (integer)4
02.zrem key value1 value2 删除集合中的元素
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
03.zremrangebyscore key min max 作用:按照socre 来删除元素,删除score在[min,max]之间的
redis 127.0.0.1:6379>zremrangebyscore stu 4 10 (integer)2 redis 127.0.0.1:6379>zrange stu 0 -1 1)"f"
04.zremrangebyrank key start end 作用:按照排名删除元素,删除名次在[start,end]之间的
讯享网redis 127.0.0.1:6379>zremrangebyrank stu 0 1 (integer)2 redis 127.0.0.1:6379>zrange stu 0 -1 1)"c" 2)"e" 3)"f" 4)"g"
05.zrank key member 作用:查询member 的排名(升序0名开始)
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
06.zrevrank key memeber 作用:查询member的排名(降序0名开始)
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
07.zrange key start stop [withscores] 作用:把集合排序后,返回名次[start,stop]的元素 默认是升序排序,withscres是把score也打印出来。
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
08.zrevrange key start stop 作用: 把集合降序排列,取名字[start,stop]之间的元素。
讯享网redis 127.0.0.1:6379>zadd class 12 lily 13 lucy 6 lilei 21 poly (integer)4 redis 127.0.0.1:6379>zrank class 0 3 //这里是第0名到第3名之间的 1)"poly" 2)"lily" 3)"lucy" 4)"lilei" redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
09.zrangeby score Key min max [withscores]limit offset N 作用:集合(升序)排序后,取score在[min,max]内的元素,并跳过offser个,取出N个
redis 127.0.0.1:6379>zadd stu 1 a 3 b 4 c9 e 12 f 15 g (integer)6 redis 127.0.0.1:6379>zrangebyscore stu 3 12 limit 1 2 withsocres 1)"c" 2)"4" 3)"e" 4)"9" //在这里还是取里面的元素,不过是按分数来取里面的值。 redis 127.0.0.1:6379>zadd class 12 lily 13 lucy 6 lilei 21 poly (integer)4 redis 127.0.0.1:6379>zrangebyscore class 13 18 1)"" 2)""
10.zcard key 作用:返回元素个数
讯享网redis 127.0.0.1:6379>zrangebyscore class 13 18 //取13岁到18岁的值 1)"lucy" 2)"lilei" redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
11.zcount key min max 作用:[min,max]区间内元素的数量
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
12.zinterstore destination numkeys key1 [key2...]
[weights weight[weight....]]
[Aggregate sum|min|max]
求key1,key2的交集,key1,key2的权重分布是weight,weight2
聚合方法用:sum|min|max
聚合的结构,保持在dest集合内
注意:weights,aggregate 如何理解?
答:如果有解决,交集元素又有score,score怎么处理?Aggreegate sum->score 相加,min求最小score,max最大score
另:可以通过weight 设置不同key的权重,交集时,socre*weights
讯享网redis 127.0.0.1:6379>zadd z1 2 a 3 b 4 c (integer)3 redis 127.0.0.1:6379>zadd z3 2.5 a 1 b 8 d (integer)2 redis 127.0.0.1:6379>zinterstore tmp 2 z1 z2 redis 127.0.0.1:6379>zrange tmp 0 -1 1)"b" 2)"a" redis 127.0.0.1:6379>zrange tmp 0 -1 withscores 1)"b" 2)"4" 3)"a" 4)"4.5" redis 127.0.0.1:6379>zinterstore tmp 2 z1 z2 aggregate sum (integer)2 redis 127.0.0.1:6379>zrange tmp 0 -1 withscores 1)"b" 2)"4" 3)"a" 4)"4.5" redis 127.0.0.1:6379>zinterstore tmp 2 z1 z2 aggregate min (integer)2 redis 127.0.0.1:6379>zrange tmp 0 -1 withscores 1)"b" 2)"l" 3)"a" 4)"2" redis 127.0.0.1:6379>zinterstore tmp 2 z1 z2 weights 1 2 (integer)2 redis 127.0.0.1:6379>zrange tmp 0 -1 withscores 1)"b" 2)"l" 3)"a" 4)"2" redis 127.0.0.1:6379>zinterstore tmp 2 z1 z2 weights 1 2 (integer)2 redis 127.0.0.1:6379>zrange tmp 0 -1 withscores 1)"b" 2)"5" 3)"a" 4)"7" redis 127.0.0.1:6379>
08.Redis知识点八:hash结构及命令详解
01.hset key field value 作用:把key中filed域的值设为value 注意:如果没有field域。直接添加,如果有,则覆盖原field域的值。
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
02.hmset key field1 value1[field2 value2 field3 value3 .....fieldn valuen] 作用:设置field1 ->N个域,对应的值是value1->N (对应PHP理解为$key=array(file1=>value1,field2=>value2......fuekdB=>valueN))
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
03.hget key field 作用:返回key中field域的值
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
04.hmget key field1 field2 fieldN 作用:返回key中的field1 field2 fieldN域的值。
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
05.hgetall key 作用:返回key中,所有域与其值。
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
06.hdel key field 作用:删除key中的field域
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
07.hlen key 作用:返回key中的元素的数量
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
08.hexists key field 作用:判断key中有没有field域。
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
09.hinrby key field value 作用:是把key中的field域的值增长整项值value
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
10.hinrby float key field value 作用:是把key中的fiekd域的值增长浮点值value
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
11.hkeys key 作用:返回key中所有的field
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
12.kvals key 作用:返回key中所有的value
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
09.Redis知识点九:redis事务及锁应用
Redis支持简单的事务
Redis与MySql事务的对比
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
010.Redis知识点十:频道发表与消息订阅
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
1
讯享网redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379> redis 127.0.0.1:6379>
011.Redis知识点十一:rdb快照持久化
持久化方式:持久化:把数据存储于断电后不会丢失的设备中,通常是硬盘。
常见的持久化方式:
主从: 通常从服务器保持和持久化,如mongoDB的replication sets 配置
日志:操作生成相关日志,并通过日志来恢复数据 couchDB对于数据内容,不修改,只追加,则文件本身就是日志,不会丢失数据
Redis常见的两种持久方式一(rdb快照持久化):
rdb的工作原理:每隔N分钟或N次写操作后,从内容dump数据形成rdb文件,压缩放在备份目录。
注意: N分钟或N次,压缩,目录部分可通过参数来配置。
rdb快照相关参数:
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后1个关键字发生变化。 save 300 10 #必须是300秒之后至少10个关键字发生变化。 save 60 10000 #必须是60秒之后至少10000个关键字发生变化。 stop-writes-on-bgsave-error yes #后台存储错误停止写。 rdbcompression yes #使用LZF压缩rdb文件时校验。 dbfilename dump.rdb #设置rdb文件名。 dir ./ #设置工作目录,rdb文件会写入该目录。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/51758.html