redis基础知识

一.redis也是非关系型数据库**(作用在内存上)**

经常作为缓存使用 那么他跟memcached比独特之处是什么
1.redis可以持久化数据到硬盘,memcached只能做缓存
redis可以用来做存储,也就是redis可以将数据持久化到硬盘,而memcached只能用作缓存
2.redis相比于memcached,其支持的数据类型更多.
memcached存储的数据只有一种字符串类型,redis可以存储字符串,链表,哈希结构,集合,有序集合

二.redis的优点

1.**读写速度快,**数据存放在内存上,数据结构类似于hashmap
hashmap的又是就是查找和操作的时间复杂度都是O(1)
2.支持丰富的数据类型,string,hash,list,set,sored
3.支持简单的事物,watch
4.丰富的特性,可以用于缓存,消息队列,按可以设置过期时间,到期后自动删除
5.支持数据持久化(将数据存储到硬盘),支持aof和rdb两种持久化,从而进行数据恢复操作,可以有效的防止数据丢失
6.支持主从(master-slave)复制来实现数据备份,主机会自动将数据同步到从机

三.redis客户端和服务端命令

redis-server:服务端命令
&nbmp;&nbmp;启动一个redis的命令是:redis-server redis.windows.conf
redis-cli:客户端命令
&nbmp;&nbmp;启动一个客户端的redis命令:redis-cli -p 6379
一个redis.windows.conf配置就是一个redis服务器,需要启动多个服务器时只需要修改一下这个配置文件redis.windows.conf的名称,更改端口号,再用redis-server就可以启动。

四.redis基础命令:

 **(1)key*        //返回键(key)
 (2)key list*   //返回名字以list开头的所有键(key)**
 (3)exists list1 //判断键名为list1的是否存在 存在返回1, 不存在返回0
 (4)del list1      //删除一个键(名为list1)
 (5)expire list1 10 //设置键名为list1的过期时间为10秒
     **注意:通过这种有效期可以做到自动删除,其实有效期到了,
     也不是立马删除的,删除的时机是有配置文件决定的。**
 (6)ttl list1   //查看键名为list1的过期时间,若为-1表示已过期 或 永不过期
 **(7)move age 1 //将键名age的转移到1数据库中。
 (8)select 1 //表示进入到1数据库中,默认在0数据库(默认总共16个数据库)**
 (8)persist age //移除age的过期时间。
 (10)flushdb:删除所有的数据 清除当前所在库的所有数据
 (11)flushall 清空所有数据

五.redis五种数据类型基本语法
基本操作里的跟范围有关的操作头尾都能取到
1.str类型
(1)set:设置key对应的值为string类型的value,如果该key存在,设定的value值会将原来的value值覆盖.所以redis中的key只能有一个

set name zs

(2)get:根据key获取value值

get name

(3)setnx:为了避免key存在值覆盖的情况,运用此方法只有key值不存在才能设置成功返回1
(4)setex:设置字符串,同时设置有效期. ex—expire(有效期)

127.0.0.1:6379> setex color 10 red
OK
立即查询
127.0.0.1:6379> get color"red"
10秒后查询
127.0.0.1:6379> get color
(nil)

(5)setrange:替换字符串. 从哪里开始(0) 替换成什么

127.0.0.1:6379> set email jalja@sina.com
OK
127.0.0.1:6379> get email
"jalja@sina.com"
127.0.0.1:6379> setrange email 6 163.com
(integer) 14
127.0.0.1:6379> get email
"jalja@163.comm"

(6)mset:一次性设置多个key-value,返回ok表示全部设置,返回0表示全部失败,如果存在则替换 m–many
(7)msetnx:一次设置多个不存在的key-value,返回1表示全部设置成功,返回0表示全部失败。

127.0.0.1:6379> msetnx weight 80 height 168 height 170
(integer) 1
127.0.0.1:6379> get height //代码段里键值可以重复只不过后面的值会覆盖之前的值
"170"

(8)getset:先获取在设置如果获取不到返回nil直接设置新值

127.0.0.1:6379> getset hi hello
(nil)
127.0.0.1:6379> get hi
"hello"

(9)getrange:获取key对应value的字符串

127.0.0.1:6379> get email
"jalja@163.comm"
127.0.0.1:6379> getrange email 0 4
"jalja"

(10)mget:一次性获取多个key对应的value值,不存在返回nil
(11)incr:对key对应的value做加一操作,并返回新值 如果key不存在默认原来的值为0

127.0.0.1:6379> incr x
(integer) 1
127.0.0.1:6379> get x
"1"

(12)incrby:与incr类似,加指定值,key不存在的时候会设置key,并认为该key原来的value=0
(13)decr:对key对应的value做减1操作
(14)decrby:对key对应的value减去指定的值
(15)append:对key对应的vlaue字符串追加,返回新字符串的长度

127.0.0.1:6379> get name1
"zs"
127.0.0.1:6379> append name1 ML
(integer) 4
127.0.0.1:6379> get name1
"zsML"

(16)strlen:获取key对应value的长度

127.0.0.1:6379> get name1
"zsML"
127.0.0.1:6379> strlen name1
(integer) 4

2 list类型
list是一个链表结构,主要功能是push.pop.获取一个范围的所有值等,操作中key理解为链表的名字,redis的list类型其实就是一个每个子元素都是string类型的双向链表.我们可以通过push,pop操作链表的头部或者链表的尾部添加元素,这样list既可以作为栈,有可以作为队列.
(1)lpush:在key对应的list头部添加字符串元素,返回list中元素的个数

127.0.0.1:6379> lpush list1 "hello"
(integer) 1
127.0.0.1:6379> lpush list1 "word"
(integer) 2

(2)rpush:在key对应的list尾部添加元素
(3)lrange:获取list中的元素

127.0.0.1:6379> lrange list1 0 -10:第一个,-1:最后一个)

(4)linsert:在key对应的list的特定位置前或者后添加字符串

127.0.0.1:6379> linsert list2 before 11 10.5
(integer) 3

(5)lset:更改list指定下标的元素,返回ok表示设置成功

127.0.0.1:6379> lset list2 1 10.00
OK

(6)lrem:从key对应的list中删除n个value相同的元素(n<0从尾部删除,n=0全部删除,n>0从头删除)

127.0.0.1:6379> lrem list2 1 1
(integer) 1
127.0.0.1:6379> lrange list2 0 -1
1) "2"
2) "1"
3) "------"
4) "3"
5) "4"
6) "1"
127.0.0.1:6379> lrem list2 -1 1
(integer) 1
127.0.0.1:6379> lrange list2 0 -1
1) "2"
2) "1"
3) "------"
4) "3"
5) "4"

(7)ltrim:保留list指定范围的数据,其他的都不要了

127.0.0.1:6379> ltrim list2 2 3
OK
127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "4"

(8)lpop:从list头部删除元素,并返回该元素
(9)rpop:从list尾部删除元素,并返回该元素
(10)rpoplpush:从第一个list的尾部删除元素,并添加到第二个list的头部

127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) "hello"
127.0.0.1:6379> rpoplpush list1 list
"hello"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"

(11)lindex返回名称为key的list中index位置的元素<===>list[index]

127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lindex list 1
"one"

(12)llen:返回指定key对应list长度<==>len(list)
3.hash类型
redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是o(1).hash特别适合存储对象.相比较对象的每个字段存储成单个string类型.将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.操作起来就像在表中操作字符串
(1)hset:设置hash field 为指定值,如果keybucz,则先创建.key存在则替换

127.0.0.1:6379> hset user:001 name zs
(integer) 1

(2)hget:获取指定field字段的值

127.0.0.1:6379> hget user:001 name
"zs"
#设置一个user:001 的用户的name为zs(可以将user:001看做一个表)

(3) hsetnx:设置hash filed 为指定值,如果key不存在,则先创建。如果存在则返回0表示设置失败。

127.0.0.1:6379> hsetnx user:001 name ML
(integer) 0
127.0.0.1:6379> hsetnx user:001 age 1
(integer) 1

(4)hmset:同时设置hash的多个file

127.0.0.1:6379> hmset user:002 name MM age 20

(5)hmget:获取全部指定的hash field,必须指定获取key的名称
(6)hincrby:对hash 数字字段加上指定的值

127.0.0.1:6379> hincrby user:002 age 5

(7)hexists:测试指定的filed是否存在,返回1表示存在,返回0表示不存在
(8)hlen:返回hash对象的键值对数量

127.0.0.1:6379> hlen user:002
(integer) 2

4.sets类型
set是一个string类型的无序集合.不允许重复.哈希加密不就不能重复吗一个道理
集合底层是由hash table实现的,添加.删除.查找的复杂度都是o(1)
(1)sadd:向key对应的set集合中添加元素,返回1表示添加成功,返回0表示添加失败

127.0.0.1:6379> sadd myset1 one
(integer) 1

(2)smembers:查看set集合中的元素

127.0.0.1:6379> smembers myset1
1) "two"
2) "one"

(3)srem:删除key对应set集合中的元素,返回1表示删除成功0表示失败

127.0.0.1:6379> srem myset1 two
(integer) 1

(4)spop:随机删除set中的一个元素并返回该元素(因为set无序所以删除随机)
(5)sdiff:返回给定set集合的差集(以前面的集合为标准)

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sdiff myset1 myset2
1) "three"
127.0.0.1:6379> sdiff myset2 myset1
1) "two"

(6)sdiffstore:返回所有给定set集合的差集,并将差集添加到另外一个集合中

127.0.0.1:6379> sdiffstore myset3  myset1 myset2
(integer) 1
127.0.0.1:6379> smembers myset3
1) "three"

(7)sinter:返回给定集合的交集
(8)sinterstore:返回所有给定集合key的交集,并将结果存为另一个key
(9)sunion: 返回所有给定集合的并集
(10)sunionstore 返回所有给定集合的并集,并将结果存入另一个集合
(11)smove:从第一个集合中移除元素并将该元素添加到另一个集合中。

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset5
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smove myset5 myset1 two
(integer) 1
127.0.0.1:6379> smembers myset5
1) "three"
2) "one"
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"

(12)scard:返回set集合中元素的个数 llen(list) strlen (str) hlen(hash)
(13)sismember:测试元素是否是set集合中的成分 s is members 返回1:表示是 0:不是

127.0.0.1:6379> sismember myset1 tree
(integer) 0
127.0.0.1:6379> sismember myset1 three
(integer) 1

(14)srandmember:随机返回set集合中的一个成分,但不删除该元素

127.0.0.1:6379>  srandmember myset1
"one"

5 sorted set(zset)类型
sorted set是set的一个升级版,他在set基础上增加了一个顺序属性,这一属性在添加元素时可以指定,每次指定后,zset会自动重新按新的score值排列顺序.可以理解为通过hash函数后生成三列散列表第一列为排序分数第二列为值第三列为地址可以通过地址信息快速找到数据.
(1)zadd:向有序集合zset中添加元素并指定顺序,如果该元素存在添加不成功,如果分数存在则并列排序

127.0.0.1:6379> zadd z1 0.5 one
(integer) 1
127.0.0.1:6379> zadd z1 0.5 one
(integer) 0
127.0.0.1:6379> zadd z1 0.5 two
(integer) 1

(2)zrange:从zset集合中取出元素[withscores] 输出元素顺序号

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"

(3)zrem:删除zset集合指定的元素

127.0.0.1:6379> zrem myzset1 two
(integer) 1

(4)zincrby 向有序集合的score添加指定分数 如果成分不存在创建成分 成分存在增加指定分数

127.0.0.1:6379> zadd z2 1 100
(integer) 1
127.0.0.1:6379> zincrby z2 1 10
"1"
127.0.0.1:6379> zrange z2 0 -1 withscores
1) "10"
2) "1"
3) "100"
4) "1"
127.0.0.1:6379> zincrby z2 2 10
"3"
127.0.0.1:6379> zrange z2 0 -1 withscores
1) "100"
2) "1"
3) "10"
4) "3"

(5)zrank:正序方式,获取指定元素的索引下标

127.0.0.1:6379> zrange z2 0 -1 withscores
1) "100"
2) "1"
3) "10"
4) "3"
127.0.0.1:6379> zrank z2 10
(integer) 1

(6)zrevrank:逆序的方式获取指定元素的索引下标 rev—reverse

127.0.0.1:6379> zrevrank z2 10
(integer) 0

(7)zrevrange:从zset集合中倒叙(score倒叙)获取元素—毕竟排序是以score排序
(8)zrangebyscore:从zset集合中根据score顺序获取元素

127.0.0.1:6379> zrangebyscore z2 3 4 withscores
1) "10"
2) "3"

(9)zcount:返回集合中给定score区间的元素数量

127.0.0.1:6379> zcount z2 3 4
(integer) 1

(10)zcard:返回zset集合中所有元素个数

127.0.0.1:6379> zcard z2
(integer) 2

(11)zremrangebyrank:删除集合中排名(下标)在给定区间的元素

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zremrangebyrank myzset1 1 2
(integer) 2
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"

(12)zremrangebyscore::删除集合中顺序(score值)在给定区间的元素

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zremrangebyscore myzset1 3 4
(integer) 2
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "five"
2) "5"

注意啊""https://note.youdao.com/ynoteshare1/index.html?id=b25d0db9b99d173ad016f8d84184bd99&type=note
这里rank操作指对索引下标操作:从0开始
score操作指对你自己设定分数操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值