redis命令
目录 redis1.服务端和客户端指令:1.服务端2.客户端: 2.值的类型1.string2.键命令3.hash4.list5.set6.zset4.redis与python交互5.搭建主从1.配置主2.配置从3.主从数据操作4.集群操作5.创建集群6.遇见bug补充阅读网站
redis
redis是nosql(not only sql非关系型数据库)的代表,内存型数据库
1.服务端和客户端指令:
1.服务端
服务器端的命令为redis-server
redis-server --help
重启redis服务
sudo service redis stop
redis-server redis.conf #修改配置文件之后需要重新制定应用配置文件
redis-cli会默认连接127.0.0.1 可以用redis-cli -h 指定ip 连接之后用ping测试如果返回pong则连接成功
个人习惯
ps aux | grep redis 查看redis-server 服务器进程 *
sudo kill -9 pid 杀死redis-server服务器 **
sudo redis-server /etc/redis/redis.conf 指定加载的配置文件(更改配置文件之后运行生效 ***
2.客户端:
1.客户端的命令为redis-cli -h ip -p port **
2.可以使⽤help查看帮助⽂档
redis-cli --help
3.连接redis
redis-cli
4.运⾏测试命令
ping
5.切换数据库数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库,用select来切换
select 10
2.值的类型
值的类型分为五种:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
1.string
flushall 清空所有
mset key1 value1 key2 value2 设置多个值
mget key 获取多个值
get key 获取值 set key value 设置值
setex key seconds value 设置键值及过期时间,以秒为单位
追加值 append key value
获取:根据键获取值,如果不存在此键则返回nil get key
根据多个键获取多个值 mget key1 key2 ...
2.键命令
查看所有键 keys * 查看名称中包含a的键 keys 'a*' '' 可有可无
判断键a1是否存在 exists a1 存在返回1,不存在返回0
查看键对应的value的类型 type key
删除键a2、a3 , 里面的值也会被删除 del a2 a3
设置键'a1'的过期时间为3秒,过期之后就删除了 expire 'a1' 3
查看键'bb'的有效时间 ttl bb
3.hash
设置过期时间就给key设置,在hash里面无论键值都必须是字符串
设置键 user的属性name为itheima hset user name itheima
设置多个属性 hmset u2 name itcast age 11
获取键u2的所有属性 hkeys u2
获取键u2属性'name'的值 hget u2 'name'
获取键u2属性'name'、'age的值 hmget u2 name age
获取键'u2'所有属性的值 hvals u2
删除属性,属性对应的值会被⼀起删除.删除键'u2'的属性'age' hdel u2 age
4.list
从键为'a1'的列表左侧加⼊数据a 、 b 、c lpush a1 a b c 这里的l表示left
从键为'a1'的列表右侧加⼊数据0 1 rpush a1 0 1 这里的r表示right
在键为'a1'的列表中元素'b'前加⼊'3 linsert a1 before b 3
获取键为'a1'的列表所有元素 lrange a1 0 -1
修改键为'a1'的列表中下标为1的元素值为'z' lset a 1 z
向列表'a2'中加⼊元素'a'、'b'、'a'、'b'、'a'、'b' lpush a2 a b a b a b
从'a2'列表右侧开始删除2个'b' lrem a2 -2 b
查看列表'a2'的所有元素 lrange a2 0 -1
5.set
- ⽆序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 说明:对于集合没有修改操作
向键'a3'的集合中添加元素'zhangsan'、'lisi'、'wangwu' sadd a3 zhangsan sili wangwu
获取键'a3'的集合中所有元素 smembers a3
删除键'a3'的集合中元素'wangwu' srem a3 wangwu
6.zset
- sorted set,有序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
- 说明:没有修改操作
向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
获取键'a4'的集合中所有元素 zrange a4 0 -1
获取键'a4'的集合中权限值在5和6之间的成员 zrangebyscore a4 5 6
获取键'a4'的集合中元素'zhangsan'的权重 zscore a4 zhangsan
删除集合'a4'中元素'zhangsan' zrem a4 zhangsan
删除集合'a4'中权限在5、6之间的元素 zremrangebyscore a4 5 6
flushdb 清空当前数据库
nat 虚拟与实际用一块网卡 不能实际通信
桥接模式 两个网卡
windows pycharm 安装reids pip install --user redis
-- 先查看⾃⼰的 gem 源是什么地址
gem source -l -- 如果是https://rubygems.org/ 就需要更换
-- 更换指令为
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
-- 通过 gem 安装 redis 的相关依赖
sudo gem install redis
-- 然后重新执⾏指令
4.redis与python交互
可以在windows中安装redis之后通过外网连接ubuntu远程ip
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#添加键name,值为itheima
result=sr.set('name','itheima') #设置
#获取键name的值
result = sr.get('name') #获取
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加 #修改
result = sr.set('name','itcast')
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加 #添加
result = sr.delete('name')
#获取所有的键 #获取
result=sr.keys()
#输出响应结果,如果添加成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
集群与python交互
安装集群模块 pip install redis-py-cluster 创建⽂件redis_cluster.py,示例码如下
from rediscluster import *
if __name__ == '__main__':
try:
# 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
startup_nodes = [
{'host': '192.168.26.128', 'port': '7000'},
{'host': '192.168.26.130', 'port': '7003'},
{'host': '192.168.26.128', 'port': '7001'},
]
# 构建StrictRedisCluster对象
#decode_responses=True 是将默认的二进制格式转换为字符串,如上面的一个交互打印出来就是二进制格式数据
src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)
# 设置键为name、值为itheima的数据
result=src.set('name','itheima')
print(result)
# 获取键为name
name = src.get('name')
print(name)
except Exception as e:
print(e)
5.搭建主从
1.配置主
- 查看当前主机的ip地址
ifconfig - 修改etc/redis/redis.conf文件
sudo vi redis.conf
bind 192.168.26.128 - 重启redis服务
sudo service redis stop
redis-server redis.conf
2.配置从
- 复制etc/redis/redis.conf文件
sudo cp redis.conf ./slave.conf - 修改redis/slave.conf文件
sudo vi slave.conf - 编辑内容
bind 192.168.26.128
slaveof 192.168.26.128 6379
port 6378 - redis服务
sudo redis-server slave.conf - 查看主从关系
redis-cli -h 192.168.26.128 info Replication
3.主从数据操作
在master和slave分别执⾏info命令,查看输出信息 进入主客户端
redis-cli -h 192.168.26.128 -p 6379
进入从的客户端
redis-cli -h 192.168.26.128 -p 6378
在master上写数据
set aa aa
在slave上读数据
get aa
4.集群操作
redis集群功能:主从复制 读写分离 负载均衡
只要是集群,读写都会重定向
注意项:
*连接集群的时候一定要加上-c 否则用从读写会失败
在哪个服务器上处理数据是根据crc16算法决定的
可以直接执行第三步,第二步需要把org改成com
-- 先查看⾃⼰的 gem 源是什么地址
gem source -l -- 如果是https://rubygems.org/ 就需要更换
-- 更换指令为
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
-- 通过 gem 安装 redis 的相关依赖
sudo gem install redis
-- 然后重新执⾏指令
5.创建集群
把ip改成自己的
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005
根据上图可以看出,当前搭建的主服务器为7000、7001、7003,对应的从服务器是7004、7005、7002
在172.16.179.131机器上连接7002,加参数-c表示连接到集群
redis-cli -h 172.16.179.131 -c -p 7002
6.遇见bug
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用
原因:
强制关闭Redis快照导致不能持久化。 解决方案:
运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。
补充阅读网站
http://www.runoob.com/redis/redis-commands.html
http://redisdoc.com/ 中文