Redis基础知识积累

1简单介绍:  
===开源的  C语言编写  key_value键值对儿形式存储  
===高性能,提供多种语言的API//SET  每秒11万次,GET  每秒81000次
===数据完全存放在内存中,支持数据的持久化,支持master-slave模式的数据备份。(主从级关系)
===value可以是字符串,(hash)Map,列表(List),集合(Set),有序集合(sorted set)
适用场景:
===取最新N个数据的操作
===排行榜,取top  N个数据
===精确的设置过期时间
===做计数器(统计登陆了几个用户)
===实时系统,翻垃圾系统
===Pub  Sub构建实时消息系统
===构建消息队列
===缓存
2安装:
===启动服务:redis-server [redis.windows.conf]
===启动客户端:redis-cli


3配置的设置:
1) 查询配置:
>config get 属性名
>config get port 得到端口号


==语法:config set 属性名 属性值
>config set loglevel debug //把日志改成debug 必须是合法的取值才行
注意:当服务停止后,配置文件如果不改变的话,重新启动后仍然为此种情况。
4.数据类型
==String
它是redis的最基本类型,一个key对应一个value,它是二进制安全的,可以包含任何数据。可以包含图片或者对象(序列化)
==Hash
他是一个键值对集合,特别适合存放对象
//hset 一次设置一个值 hget 一次得到一个值
127.0.0.1:6379> hset userinfo userName "admin01"
(integer) 1


127.0.0.1:6379> hget userinfo userName
"admin01"
//hmset 一次设置多个值 ,hgetall 一次得到多个值
Userinfo  :username admin001 password 123 note this is note


127.0.0.1:6379> hmset userinfo username admin password 123 note "this is note"
OK
127.0.0.1:6379> hgetall userinfo
1) "userName"
2) "admin01"
3) "username"
4) "admin"
5) "password"
6) "123"
7) "note"
8) "this is note"
==List
简单的字符串列表,按插入顺序排序,添加数据的时候可以指定位置(在左,在右)
>lpush/rpush(从左添加,从右添加) mylist a
>lrange 0 2从第几个开始查 查到第几个
可以一起push多个 lpush xxx a b c d e f g
==Set
无重复数据  无序性
//例子  一次添加多个数据
sadd s1 aaa bbb ccc eee fff
//取数据
smembers s1
>sadd key value
==ZSet(Sort Set)
有序集合
它会关联到一个double类型的分数,用来排序
zset中的成员必须是唯一的,但是分数可以是相同的。
添加:
zadd yyy 80(分) stu1
获取:
zrangebyscore yyy 0 100(表示0-100的分数区间)

zrange yyy 0 -1 withscores(连带着获取分数)
=======================================================================Redis==================================================================
1.对键的操作
2.对字符串进行操作
3.对哈希表的操作
4.对列表的操作
5.对Set进行操作  Set集合
===============================================================================================================================================
=====1.对键的操作
  key - value
  //设置键对应的值
  set xxx 111
  del xxx
  //判断一个键是否存在
  exists 键名
  127.0.0.1:6379> exists userinfo
  (integer) 1
  //设置键的过期时间
  127.0.0.1:6379> expire userinfo 10(10为秒数)
  (integer) 1
  127.0.0.1:6379> get userinfo
  (nil)
  //设置键的过期时间
  pexpire userinfo 1000 它是以毫秒为单位的
  //删除key的过期时间(在过期之前做)
  persist 键名
  //查找某个符合模式的key
  keys goods*  查找所有以goods开头的key
  keys *       查找所有的key
  //将当前库中的key移到某个数据库中
  move  键名  哪个库(0-16表示)
  select 0  //选择使用第0个库
  注意:如果目标库中有了同名的key,则不能移动。
  //清空数据库
  flushdb
  //随机返回一个key
  ==mset key1 value1 key2 value2 key3 value3
  randomkey
  //查看key的数据类型
  type 键
======2.对字符串进行操作
  //设置和取值
  set k1 dog
  set k2 "this is a dog"
  get k1/k2
  //getrange 键名 开始  结束
getrange k1 5 -1(后面的-1表示一直取到末尾)
  //getset 键名 值  给键设置一个新值,同时返回原来的值,如果没有旧值返回nil
  //mget 多个key  同时返回多个key
mget k1 k2 k3
  //取长度
strlen k1
  //对某个key多对应的value进行自增(如果这个key不存在,它将为我们自动设置这个key)
  set userinfo 1
  incr userinfo
  2
  //decr 键 递减某个键所对应的value值
decr userinfo
  //decrby 键值  数量 直接让数量减去某个值
    decrby usercount 90
  //incrby 键值  数量
     incrby usercount  999
908
   注意:非数字类型是不能进行上面的递增或者递减操作的
======3.redis命令-哈希
       //同时设置多个值
   hmset userinfo username "admin" password "123" school "heda"
   hgetall userinfo
   //hdel key field [field...]删除一个或者多个key
       hdel userinfo password school 相当于把userinfo下面的password和school删除了
   //查看一个字段,在哈希表中是不是存在
   hexists userinfo username
   //hget key field 取出某个字段的值
   hget userinfo username
   //hincrby 
   hincrby userinfo age 10
   hincrby userinfo age 5
   15
   //hkeys key 得到哈希表中所有的字段名
   hkeys userinfo
   //hlen key 得到字段数量
   hlen userinfo
   //获取指定字段的值
   hmget key f1 [f2]
   hmget userinfo username age
   //只得到某个字段的值
   hget userinfo username
   //得到所有value的值
   hvalue key 
=====4.对列表进行操作
//向列表中存放数据
lpush  rpush  左存放 右存放
lrange userlist 0 -1 查看列表中的数据
//弹出列表中的数据
lpop mylist 注意:取完数据后指剩下两个了
//llen 得到列表的长度
llen mylist
//通过索引进行访问
lindex mylist 2
//blpop
blpop mylist 10 限定时间,如果在时间过后没有取到数据则返回空
//lrem key count value从列表中移除和value值相等的count个元素(count超出也不会报错)
lrem mylist 3 a 从 mylist中移除3个a
//给某个索引上设置值
lset mylist 2 "this is a cat" 给2所在的索引添加上该条语句
//对列表进行剪切
ltrim mylist 1 2 表示从1号索引剪切到2号索引
/rpushx key value 为已存在的列表添加值,添加在最后,如果原列表不存在,则返回0
=====5.对Set进行操作
//元素没有顺序,没有重复 
//添加 - sadd  取 smembers
//取元素个数
scard key
//取差集
sdiff  key1 key2
//将取出来的差集放到一个新的集合里
sdiffstore newset myset yourset
smembers newset
//取交集
sinter key1 key2
sinterstore publishset key key1 key2
smembers publishset
//判断是不是某个集合中的成员
sismember myset fish  判断myset中有没有fish成员
//将一个集合中的成员移到另一个集合中
smove yourset myset cat  将猫这个成员移动到myset中
smembers myset
//移动并返回集合中的一个元素
spop myset
//返回集合中的一个或多个随机数,但并不移除
srandmember yourset 2  
//移除一个或者多个成员
srem yourset a "b"  直接移除
//取所有集合的并集(如果有重复是会去掉的)
sunion yourset myset himset publishset
//去所有集合的并集  放到一个新的集合中
sunionstore newset myset yourset himset publishset最后存放到了newset集合中。
======6.对ZSet进行操作
元素不会有重复,用分值进行排序
//对ZSet进行添加
zadd seazon 分数值 名称(字符串)
//得到元素个数
zcard seazon
//计算分数在2和3之间的元素有几个
zcount seazon 2 3 总结数量
//对集合中指定的成员增加分数
zincrby seazon 10 qiu 在默认基础上加10
说明:如果不存在这个字段则创建
//zrane key start stop []自动排序输出 元素名称+分数值
//从大到小  逆序输出
zrevrange xxx 0 -1
//去所有成员的分数值
zscore xxx goods.04
//移除集合中的某个成员
zrem seazon night
//返回某个成员的索引
zrank xxx goods.05
=======================================================================================================================================================================




================================================================================================================================================================
======HyperLogLog基数估算
HyperLogLog可以接受多个元素作为输入,并给出输入元素的基数估算值。
==基数  集合中不同元素的数量{1,2,3,1,2,3 4}它的基数是4
==估算  算法给出的基础不是完全精确的,但会控制在合理的范围内。
HyperLogLog 本身不会存储这些输入的元素,所以它不能像集合那样返回输入的元素。
pfadd yy a b c d e a b c d
pfcount yy//取出基数

pfmerge n1 n2 //合并n1  n2 到n1
================================================================================================================================================================

redis的订阅与发布

====================================================================================================================================================================

===订阅消息:subscribe chat1 订阅一个频道  以后别人再往该频道上发布消息就能接收到。
光标一直闪烁状态,等待频道发送消息。
如何发布消息?
publish chat1 "hello ni hao"
向一个没有人接收的频道发送消息,不会成功,返回0
//查看订阅与发布的一些状态
查看频道
pubsub channels
查看某个频道的订阅者数量
pubsub num sub chat1
退订某个频道
unsubscribe chat1
退订指定模式的一组频道
punsubscribe java.*
订阅指定模式的一组频道
psubscribe java.* 订阅所有与java.打头的频道
======================================================================================================================================================
redis中的事物


=============================================================================================================================================
redis事务可以一次性执行多条命令
1.事务是一个单独的隔离操作:事务中所有的命令都会序列化,按顺序执行,执行过程中,不会被其他的客户端发送的命令打断。
2.事务是一个原子操作,事务中的命令,要么全完成,要么一个也不执行。

一个事务从开始到执行完成,要有以下三个阶段:
开始事务  
执行命令
提交事务

multi打开事务
exec提交事务

DISCARD  取消事务执行







猜你喜欢

转载自blog.csdn.net/qq_34341951/article/details/80860096