redis基础命令

reids(noSql = not only sql)


为什么需要redis
 #用来应对高并发读写
 #海量数据的高效率存储和访问
 #高可扩展性和高可用性


nosql的特点:

 #易扩展
 #灵活的数据模型
 #大数据量,高性能
 #高可用


reds支持的键值数据类型
 #字符串类型 在redis中操作的是二进制数据,value最多可以存储512M数据
 常用命令:set key value
          get key
 getset key value
 del key
 incr key(默认整形,若value不存在,则默认赋值为0 之后加1)
 decr key 同上
 incrby key 5 //key数值加5
 decrby key 5 // key数值减5
 append key value //在key的基础上追加value ,返回字符串的长度,若key不存在,那么创建key,key的值就 是追加的值


 #字符串列表类型
arraylist使用数组的方式,linkedlist使用双向链表,双向链表增加数据,双向链表弹出数据
左侧添加: lpush 链表对应的key 多个value值
  lpushx 链表对应的key 一个value值,若可以不存在,那么不添加
右侧添加: rpush 链表对应的key 多个value值
  rpushx 链表对应的key 一个value值,若可以不存在,那么不添加
查看元素:lrange 链表对应的key 范围(0  一个值,-1表示链表中最后一个元素)
弹出元素:lpop 链表对应的key 会弹出链表中元素的第一个值
查看元素的个数: llen 链表对应的key
遍历列表删除指定元素:lrem 链表对应的key 2 2 从头到尾删除两个 value为2 的元素
lrem 链表对应的key -2 2 从尾到头删除两个 value为2 的元素
  lrem 链表对应的key 0 2 从头到尾删除所有value为2 的元素
指定位置插入数值:lset 链表对应的key 索引 value (索引从零开始)
指定元素之前插入数值:linsert 链表对应的key before 元素值 value 
指定元素之后插入数值:linsert 链表对应的key after 元素值 value 
将第一个链表的右侧的数据插入到第二个链表的左侧:rpoplpush 链表对应的key 链表对应的key


 #有序字符串集合类型(按照value的分数来排序)
zadd set对应的key 分数 value ...(多个)
zrem set对应的key value
zscore set对应的key value
zcard set对应的key
zrange set对应的key 0 -1
zrange set对应的key 0 -1 withscores
zrevrange set对应的key 0 -1 withscores
zremrangebyrank set对应的key 0 2 删除0 到 2 的元素
zremrangebyscore set对应的key 80 100 删除分数在80到100之间的元素
zrange set对应的key 0 100 withscores limit 0 2 只输出0dao2的元素
zincrby set对应的key 3 zs 给zs的分数加上3分


 #散列(hash)类型 String key String value的map集合
常用命令: hset mapName key value 设置一个map集合中的一个属性的value
 hmset mapName key value key value ... 设置多个
 hget mapName key 获取一个
 hmget mapName key key... 获取多个
 hgetall mapName 获取全部
 hdel mapName key
 del mapName 删除所有的属性值
 hincrby mapName key 5 key的value值加5
 hexists mapName key 判断key是否存在
 hgetall mapName 获取所有的key value
 hlen mapName 得到该map中属性的长度
 hkeys mapName 获取所有的key
 hvals mapName 获取所有的value


 #字符串集合类型
sadd set集合对应的key 多个value值 添加
srem set集合对应的key 指定的value 删除
smembers set集合对应的key 返回所有的元素
sismember set集合对应的key value 是否存在指定的元素
sdiff set集合对应的key set集合对应的key 根据两个set中的顺序,求出两个集合的差集
sinter set集合对应的key set集合对应的key 求出交集
sunion set集合对应的key set集合对应的key 求出并集
scard set集合对应的key 返回集合的数量
srandmember set集合对应的key 随机的返回集合中的一个元素值
sdiffstore set集合对应的key(新集合) set集合对应的key set集合对应的key 将后面两个集合中的差集存储到新的集合中
sinterstore set集合对应的key(新集合) set集合对应的key set集合对应的key 将后面两个集合中的交集存储到新的集合中
sunionstore set集合对应的key(新集合) set集合对应的key set集合对应的key 将后面两个集合中的并集存储到新的集合中
redis场景
 #缓存
 #任务队列
 #网站统计
 #数据过去处理
 #分布式集群中的session分离
 #应用排行榜


redis安装
 #linux上需要一个gcc的环境:yum install gcc-c++
 #将redis的压缩包上传并且解压
 #解压之后进入目录执行make命令来编译redis
 #在指定目录安装redis make PREFIX=路径 install
 #将redis-config文件跟bin文件夹放在一起
 #修改redis-config配置文件为后端启动模式 就是daemonize yes(改为)
 #启动redis 进入bin目录启动redis-server文件并且加载redis-config文件      redis-server redis-config(都是使用的相对路径)
 #关闭redis 进入bin使用redis-cli shutdown
 #链接redis的客户端 redis-cli
 #进入客户端之后可以进行数据的存储 eg:set name(key) kk(value) 
  get name (获取key = name的值) 查询所有的key: keys * 删除key: del key


jedis入门:
jedis jar : commons-pool jedis-2.7.0.jar


jedis实例:
jedis Jedis = new jedis("linux的IP",reids的端口)
jedis.set(key,value);
jedis.get("key");


使用jedis连接池
jedisPoolConfig jpc = new jedisPoolConfig();
//设置连接池
jpc.setMaxTotal(60) 最大的链接数
jpc.setMaxIdle(10) 最大的链接空闲数


jedisPool jp = new jedisPool(jpc,"linux的ip",jedis的端口号)


获取jedis实例
jedis jd = jedisPool.getResource();
向jedis中设置k/v
jedis.set("key","value");


连接不到jedis的原因
未打开linux的6379端口
解决办法:进入/etc/sysconfig/iptables
将6379端口打开
之后运行sevice重启


redis的数据结构,见上


keys通用操作
keys * 返回所有的 key
keys zs? 返回zs开头的key
del keyname 删除指定的key
exists keyname 返回是否指定的key存在 
get keyname 获取指定key的名字
rename keyname newkeyname 更换新的名字
expire keyname 1000 给指定的key设置过期时间,单位是秒
ttl keyname 返回指定key所剩余的时间
type keyname 返回指定key的数据类型


redis的特性:
(1)redis是多数据库的,每个redis实例可以有16个数据库,数据库编号是从0到15,默认选择的是0号数据库,可以使用select来选择数据库 eg select 1 就是选择1号数据库。
move keyname 1 将该数据库中的key所对应的数据移到1号数据库中。
(2)redis中也有事务,redis中的事务会将命令存入到队列中,并且串行化的执行,一个客户端在执行事务的时候redis会拒绝其他客户端,来保证命令的原子性。
multi 等价与 mysql中begin
exec 等价与 mysql中的commit
discard 等价于 mysql中的rollback


eg : multi set name lc get name exec,multi和exec中的命令会串行化的执行,保证原子性




redis的持久化
(1)redis高效的原因在于数据存储在内存中
(2)将内存中的数据迁移到硬盘中,就叫做redis的持久化
(3)redis持久化的两种方式:AOF方式 RDB方式
(4)RDB:指定时间内,将数据同步到硬盘中
(5)AOF:redis服务器启动时,读取redis的日志文件来重构redis的数据,保证数据不会丢失
(6)无持久化:可以认为是一种缓存的服务方式,可以通过配置文件来生效
(7)同时使用rdb和aof


redis启动服务器:./bin/redis-server ./redis.conf
链接客户端:./bin/redis-cli

猜你喜欢

转载自blog.csdn.net/qq_32182461/article/details/80355226
今日推荐