1.对键的操作
//设置键对应的值
set xxx 123
del xxx
//判断一件键是否存在
exists 键名
//设置一个KEY的过期时间
expire xxx 10 10秒过期
pexpire xxx 10 10毫秒过期
//删除过期时间
persist xxx 过期之前做才有意义
//查找符合某个模式的KEY
keys xxx* 查找以xxx开头的key
keys * 查找所有的key
//将当前库中的key移到某个数据库中
move xxx 1 将键名为xxx的移到库1中,如果有同名key,则不能移动
//选择某个库。 默认第0个库。一共16个库
select 0
select 1
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set catname tom
OK
127.0.0.1:6379> get catname
"tom"
127.0.0.1:6379> exists catname
(integer) 1
127.0.0.1:6379> move catname 1
(integer) 1
127.0.0.1:6379> exists catname
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get catname
"tom"
127.0.0.1:6379[1]> exists catname
(integer) 1
//清空数据库
flushdb
//随机返回一个key
randomkey
//查看key对应的value的数据类型
type xxx 查看键的类型
===========================
redis 对value的操作
1.对字符串的操作
//设置与取值
set key1 dog
set key2 "a b c d"
get key1
get key2
//getrange键名 开始 结束
getrange key2 5 7 从5取到7
getrange key2 5 -1 从5取到末尾
//getset key2 cat 给键设置一个新值,并且返回原来的旧值
//mget 多个key 同时返回多个key对应的值
mget key1 key2 key3
//去value 的长度
strlen key1
//对某个key所对应的value进行自增,自减(如果不存在,会自动设置key)
incr key1
decr key1
decrby key1 100 一次减100
//在key上增加值
append key1 "abc"
2.对hash的操作
//同时设置多个值
hset key1 username "admin" password "123" school "ccc"
hgetall key1 得到所有值
//hvals key1 得到所有value的值
//删除一个或多个key
hdel key1 username
hdel key1 username password
//查看一个字段 在hash表中是否存在
hexists key1 username
//取出某个字段的值
hget key1 username
hmget key1 username
//hincrby 键 值 为字段加上指定的值
hincrby key1 age 10
//hkeys key1 得到所有key
//hlen key1 得到字段的长度,即有几个字段
3.对列表的操作
//列表里面放数据
lpush key1 a b c d 依次往左边加
rpush key2 a b c d 依次往右边添加
//列表里面取数据
lrange key1 0 -1
//弹出列表中数据
lpop key1 从左依次删数据
//得到列表长度
llen key1
//通过索引访问
lindex key1 2 从左边取下标为2的数据
//blpop 在限时弹数据
blpop key1 10 10秒内弹数据,如果没有数据,返回null
//移除元素
lrem key count value 从列表中移除和value值相等的元素,count 表示数量
//给某个索引设值
lset key1 2 "abc" 给下表为2的设定值
//剪切
ltrim key1 0 1 只保留下表0 1值
//rpushx key value 为已存在的列表添加值,如果列表不存在,返回0
rpushx key1 100
3.redis ---set集合(元素没有顺序,没重复)
//sadd key1 a b c d e 增加数据
//smembers key1 取出数据
//scard key1 得到元素个数
//sdiff key1 key2 得到key1-key2数据
//sdiff key2 key1 得到key2-key1数据
//sdiffstore key3 key1 key2 将key1-key2的数据放到key3里面
//sinter key1 key2 key1 key2的共同元素
//sismember key1 fish 查看key1里面是否有fish成员
//smove key1 key2 fish 将key1里面的fish 移动到key2
//spop key1 移除一个元素并且返回该元素
//srandmember key1 2 随机取两个元素,不删除
//srem key1 a b 移除ab两个元素
//sunion key1 key2 key3 去并集
//sunionstore keynew key1 key2 key3 将123并集元素放到new里面
=============
总结
哈希类型
hset userinfo username "abc"
hmset userinfo username "abc" password "123"
hget userinfo username
hgetall userinfo
列表集合
lpush userinfo a b c d
lrange userinfo 0 -1
Set类型
sadd userinfo a b c d
smembers userinfo
=======================================
有序集合,zset 它和set一样,不会重复,但有序
//zadd key1 1 a 1为排序的分数。 a为值
//zrange key1 0 -1 查询元素从小到大
//zrevrange key1 0 -1 查询元素从大到小
//zrange key1 0 -1 withscores 查询元素带分数
//zcard key1 得到元素个数
//zcount key1 2 3 查询2-3的元素个数
//zincrby key1 10 a 将a的score 增加10,如果a不存在,相当于增加一个10 a
//zscore key1 values 取值的分数
//zrem key1 value 删除一个值
//zrank key1 value 取值的索引
=======================================
HyperLogLog 基数估算
HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值
基数:集合中不同元素的数量 {1,2,3,1,2,3,4} 它的基数是4
估算:算法给出的基数不是完全精确的,但会控制在合理的范围内,一般用于大数据,便捷运算
HyperLogLog 本身不会存储这些元素,所以它不能像集合那样,返回输入的元素
//pfadd key1 a b c d a b c 增加一个key1的集合
//pfcount key1 计算基数
//pfmerge key1 key2 合并集合到key1
=========================================
redis 订阅与发布
//subscribe chat1 订阅chat1频道
//unsubscribe chat1 退订chat1频道
//psubscribe java* 订阅所有java开头的频道
//punsubscribe java* 退订。。。。
//publish chat1 "hello ni hao" 发布消息
//pubsub channels 查看订阅频道
//pubsub numsub chat1 查看频道订阅数量
============================================
redis 中的事务
redis事务可以一次执行多条命令
1.事务是一个单独的隔离操作,事务中所有的命令都会序列化,按顺序执行,执行过程中,不会被其他的客户端发送的命令打断。
2.事务是一个原子操作,事务中的命令,要么全完成,要么一个也不执行。
一个事务从开始执行到完成,要有以下三个阶段:
开始事务
执行命令
提交事务
//multi 打开事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> sadd myset a b c
QUEUED
127.0.0.1:6379> lpush mylist aa bb cc
QUEUED
127.0.0.1:6379> exec
1) (integer) 3
2) (integer) 3
127.0.0.1:6379>
//discard 取消事务
================================================
redis 服务器管理
//BgRewriteAof 异步执行一个aof(appendOnly file)文件重写操作,重写
会创建当前一个AOF文件体积的优化版本
RDB持久化策略。
redis 数据备份有两种,一种是已日志来做,一种已RDB.
//BgSave 后台异步保存数据到磁盘上,会在当前目录下创建文件 dump.rdb
//save 同步保存数据到磁盘上,会堵塞主进程,别的客户端无法连接
//client list 列出所有的客户端
//client kill 关闭客户端连接
client kill 127.0.0.1 49262 40262为随机端口
//client setname myclient1 给客户端设置一个名称
//client getname 得到客户端名称
//config get port 得到配置文件的端口号
//config rewrite 对redis的配置文件进行改写
config set loglevel notice
config rewrite
修改配置文件,永久有效
//config set 命令,可以对服务器的配置进行改写,临时一次有效。
//dbsize 返回当前数据库中的key数量。 keys * 可以查看key有哪些
//flushall 删除所有数据库中的所有key
//debug segfault 让redis数据库崩溃
//info查看相关信息
info cpu
info memory
=============================================
reids 安全设置
通过redis的配置文件设置密码参数,客户端连接的时候要提供密码
//查看是否设置了密码
config get requirepass
//设置密码
config set requirepass admin123
//提供密码,进行登录
auth admin123
//最大连接数
config get maxclients 默认10000
//返回连接到服务端的客户端
client list
//挂起客户端
client pause 5000 挂起5000毫秒
============================================
redis 在java中使用
下载jar包或者下载maven依赖
Jedis redis = new Jedis("localhost",6379);
reids.auth("admin123");
sout(reids.ping());
redis.close();
//对String 类型进行操作
//对于在java中添加的中文数据在命令行窗口乱码问题
1.chcp 65001
2.启动命令行的时候加参数 reids-cli --raw
============================================
redis 工具类-连接池
commons-pool2-2.4.2
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(1024);//最大连接数
config.setMaxIdle(200);//最大空闲时
config.setMaxWaitMillis(10000);以毫秒计算,-1为永不超时
config.setTestOnBorrow(true);borrow一个实列的时候,是否提前进行
JedisPool pool = new JedisPool(config,ip,port,tiomeout,auth);
==============================================
redis 在其他数据类型的应用
redis.lrange("a",0,-1);
redis.sort